-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [sorry for sending twice, Marcus, gone through wrong list email]
Hi, I expected this to be bogusfied. The thing is ... if you put a normal string for a %d it just works. Now that people learn about __toString() I think it's not clear why %d doesn't work for an object, because also (string)$obj, as Marcus pointed out, works. Is it totally off-side to support objects where also integer would be expected, were usually a string instead of an integer also works? Either by introducing __toInt() [ok, I think I better not suggest this] or at least also call __toString() for integers [which may be actually ever worse idea] or e.g. call __toInt() if available, if not __toString() and if not available -> standard behaviour. Or should I better just not have sent this email? - - Markus PHP Bug Database wrote: > ID: 37538 > Updated by: [EMAIL PROTECTED] > Reported By: [EMAIL PROTECTED] > -Status: Open > +Status: Bogus > Bug Type: Strings related > -Operating System: Linux > +Operating System: * > -PHP Version: 5CVS-2006-05-21 (CVS) > +PHP Version: * > New Comment: > > Thank you for taking the time to write to us, but this is not > a bug. Please double-check the documentation available at > http://www.php.net/manual/ and the instructions on how to report > a bug at http://bugs.php.net/how-to-report.php > > %d is an integer conversion "(int)$obj" as apposed to a string > conversion that is served by __toString(). > > > Previous Comments: > ------------------------------------------------------------------------ > > [2006-05-21 05:40:36] [EMAIL PROTECTED] > > Description: > ------------ > The modifier %d doesn't work as one would expect sprintf/printf. When a > string is returned, it is always replaced %d with '1' instead of the > evaluated number of the __toString() output. > > Consider this: > > printf("%s %d", "4", "4"); > > will output "4 4", however if the parameters are replaced with an > object whith magic __toString() which returns "4", %d is not replaced > with 4 but with 1. It always returned 1, no matter what __toString() > returns. > > > > Reproduce code: > --------------- > class foo { > function __toString() { > return "4"; > } > } > printf("%s %d\n", new foo, new foo); > printf("%s %d\n", "4", "4"); > > > Expected result: > ---------------- > 4 4 > 4 4 > > > Actual result: > -------------- > 4 1 > 4 4 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFEcEbt1nS0RcInK9ARAr/iAJ9ImDxBtQuIFiW51h7qqiHBjIrwfwCfbJTF 2t8X5EqMbvqWvt3F3BK6bjo= =ladn -----END PGP SIGNATURE----- -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php