helly           Mon Dec 29 17:26:49 2003 EDT

  Modified files:              
    /php-src/ext/standard       formatted_print.c 
    /php-src/tests/classes      tostring.phpt 
  Log:
  Use __tostring() in all printing functions.
  
  
Index: php-src/ext/standard/formatted_print.c
diff -u php-src/ext/standard/formatted_print.c:1.69 
php-src/ext/standard/formatted_print.c:1.70
--- php-src/ext/standard/formatted_print.c:1.69 Mon Aug 11 19:16:53 2003
+++ php-src/ext/standard/formatted_print.c      Mon Dec 29 17:26:47 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: formatted_print.c,v 1.69 2003/08/11 23:16:53 iliaa Exp $ */
+/* $Id: formatted_print.c,v 1.70 2003/12/29 22:26:47 helly Exp $ */
 
 #include <math.h>                              /* modf() */
 #include "php.h"
@@ -622,15 +622,27 @@
                        PRINTF_DEBUG(("sprintf: format character='%c'\n", 
format[inpos]));
                        /* now we expect to find a type specifier */
                        switch (format[inpos]) {
-                               case 's':
-                                       convert_to_string_ex(args[argnum]);
+                               case 's': {
+                                       zval *var, var_copy;
+                                       int use_copy;
+                               
+                                       zend_make_printable_zval(*args[argnum], 
&var_copy, &use_copy);
+                                       if (use_copy) {
+                                               var = &var_copy;
+                                       } else {
+                                               var = *args[argnum];
+                                       }
                                        php_sprintf_appendstring(&result, &outpos, 
&size,
-                                                                                      
  Z_STRVAL_PP(args[argnum]),
+                                                                                      
  Z_STRVAL_P(var),
                                                                                       
  width, precision, padding,
                                                                                       
  alignment,
-                                                                                      
  Z_STRLEN_PP(args[argnum]),
+                                                                                      
  Z_STRLEN_P(var),
                                                                                       
  0, expprec);
+                                       if (use_copy) {
+                                               zval_dtor(&var_copy);
+                                       }
                                        break;
+                               }
 
                                case 'd':
                                        convert_to_long_ex(args[argnum]);
Index: php-src/tests/classes/tostring.phpt
diff -u php-src/tests/classes/tostring.phpt:1.2 php-src/tests/classes/tostring.phpt:1.3
--- php-src/tests/classes/tostring.phpt:1.2     Mon Dec 15 11:59:20 2003
+++ php-src/tests/classes/tostring.phpt Mon Dec 29 17:26:48 2003
@@ -42,6 +42,13 @@
 $ar = array();
 $ar[$o->__toString()] = "ERROR";
 echo $ar[$o];
+
+echo "====test8====\n";
+var_dump(trim($o));
+var_dump(trim((string)$o));
+
+echo "====test9====\n";
+echo sprintf("%s", $o);
 ?>
 ====DONE!====
 --EXPECTF--
@@ -51,7 +58,7 @@
 )
 
 Notice: Object of class test1 could not be converted to string in %stostring.php on 
line %d
-string(6) "Object"
+string(12) "Object id #%d"
 object(test1)#%d (0) {
 }
 ====test2====
@@ -80,4 +87,13 @@
 test2::__toString()
 
 Warning: Illegal offset type in %stostring.php on line %d
+====test8====
+
+Notice: Object of class test2 could not be converted to string in %stostring.php on 
line %d
+string(6) "Object"
+test2::__toString()
+string(9) "Converted"
+====test9====
+test2::__toString()
+Converted
 ====DONE!====

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to