Re: PHP 5.1

From: Date: Sun, 05 Jun 2005 19:54:02 +0000
Subject: Re: PHP 5.1
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-16388@lists.php.net to get a copy of this message
Hello Andi, Sunday, June 5, 2005, 9:13:52 PM, you wrote: > At 07:18 PM 6/5/2005 +0200, Marcus Boerger wrote: >>2) PHP is all about the putting out text so nearly all objects created in >>PHP are meant to put something onto the generated pages. Thus i think i am >>not alone to suggest we put back the magic __toString function in place as >>we said when we dropped it's support from 5.0. Also it is very hard to >>explain why "echo $a . $obj" and "echo $a, $obj" output different things >>when one is an object. Both is pretty much against the spirit of PHP - >>easiness isn't it? > I thought you were going to write a patch up. Did you look into it? Sure but i lost track of all my patches. Maybe i should start a list that stores their review state so i can bug you more :-) Joke aside i forgot to do that so thanks for the reminder. You'll find it attached. >>3) Is 5.1 coming out without filtering? > Obviously not. (...). I want to try and work on an API proposal > first because I believe the API is where the issue is and not the coding... Cool :-) >>5) tons of other stuff i menationed offline and in public - since i lost >>the energy in tracking all that issues i guess the work and time in those >>wasn't worse the effort and they can wait anyway :-) > Yes (...). Most important is to make sure that PHP 5.1 is only better and not > worse than PHP 5.0, which I'm confident it is. And bringing PDO to the PHP > community, and allowing for Unicode work to fold into PHP dev tree is the > most important goal. It is already much faster and i heared many people claiming 5.0 was to slow. Also going for unicode seems very important. marcus

Index: tests/classes/tostring.phpt =================================================================== RCS file: /repository/php-src/tests/classes/tostring.phpt,v retrieving revision 1.5 diff -u -p -d -r1.5 tostring.phpt --- tests/classes/tostring.phpt 28 Mar 2004 14:09:47 -0000 1.5 +++ tests/classes/tostring.phpt 5 Jun 2005 19:50:35 -0000 @@ -34,9 +34,11 @@ echo "string:".$o; echo "====test5====\n"; echo 1 . $o; +echo 1 . $o; echo "====test6====\n"; echo $o.$o; +echo $o,$o; echo "====test7====\n"; $ar = array(); @@ -56,8 +58,10 @@ echo sprintf("%s", $o); test1 Object ( ) -string(1%d) "Object id #%d" -object(test1)#%d (%d) { + +Notice: Object of class test1 could not be converted to string in %stostring.php on line %d +string(12) "Object id #%d" +object(test1)#%d (0) { } ====test2==== test2 Object @@ -65,22 +69,38 @@ test2 Object ) test2::__toString() Converted -object(test2)#%d (%d) { +object(test2)#%d (0) { } ====test3==== test2::__toString() Converted ====test4==== -string:Object id #%d====test5==== -1Object id #%d====test6==== -Object id #%dObject id #2====test7==== +test2::__toString() +string:Converted +====test5==== +test2::__toString() +1Converted +test2::__toString() +1Converted +====test6==== +test2::__toString() +test2::__toString() +Converted +Converted +test2::__toString() +Converted +test2::__toString() +Converted +====test7==== test2::__toString() Warning: Illegal offset type in %stostring.php on line %d ====test8==== - -Notice: Object of class test2 to string conversion in %stostring.php on line %d -string(6) "Object" -string(1%d) "Object id #%d" +test2::__toString() +string(9) "Converted" +test2::__toString() +string(9) "Converted" ====test9==== -Object id #%d====DONE!==== +test2::__toString() +Converted +====DONE!==== Index: Zend/zend.c =================================================================== RCS file: /repository/ZendEngine2/zend.c,v retrieving revision 1.301 diff -u -p -d -r1.301 zend.c --- Zend/zend.c 22 May 2005 11:10:38 -0000 1.301 +++ Zend/zend.c 5 Jun 2005 19:50:35 -0000 @@ -216,7 +216,7 @@ ZEND_API void zend_make_printable_zval(z case IS_OBJECT: { TSRMLS_FETCH(); -#if 0 + /* Standard PHP objects */ if (Z_OBJ_HT_P(expr) == &std_object_handlers || !Z_OBJ_HT_P(expr)->cast_object) { if (zend_std_cast_object_tostring(expr, expr_copy, IS_STRING, 0 TSRMLS_CC) == SUCCESS) { @@ -224,7 +224,6 @@ ZEND_API void zend_make_printable_zval(z } zend_error(E_NOTICE, "Object of class %s could not be converted to string", Z_OBJCE_P(expr)->name); } -#endif if (Z_OBJ_HANDLER_P(expr, cast_object)) { if(Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING, 0 TSRMLS_CC) == SUCCESS) { break; Index: Zend/zend_object_handlers.c =================================================================== RCS file: /repository/ZendEngine2/zend_object_handlers.c,v retrieving revision 1.125 diff -u -p -d -r1.125 zend_object_handlers.c --- Zend/zend_object_handlers.c 18 May 2005 15:30:35 -0000 1.125 +++ Zend/zend_object_handlers.c 5 Jun 2005 19:50:36 -0000 @@ -894,13 +894,11 @@ ZEND_API int zend_std_cast_object_tostri case IS_STRING: ZVAL_STRING(&fname, "__tostring", 0); if (call_user_function_ex(NULL, &readobj, &fname, &retval, 0, NULL, 0, NULL TSRMLS_CC) == SUCCESS) { - if (retval) { - if (Z_TYPE_P(retval) != IS_STRING) { - zend_error(E_ERROR, "Method %s::__toString() must return a string value", Z_OBJCE_P(readobj)->name); - } - } else { - MAKE_STD_ZVAL(retval); - ZVAL_STRINGL(retval, "", 0, 1); + if (! retval || Z_TYPE_P(retval) != IS_STRING) { + zend_error(E_ERROR, "Method %s::__toString() must return a string value", Z_OBJCE_P(readobj)->name); + INIT_PZVAL(writeobj); + ZVAL_STRINGL(writeobj, "", 0, 1); + return FAILURE; } *writeobj = *retval; zval_copy_ctor(writeobj); @@ -939,7 +937,7 @@ ZEND_API zend_object_handlers std_object zend_std_object_get_class, /* get_class_entry */ zend_std_object_get_class_name, /* get_class_name */ zend_std_compare_objects, /* compare_objects */ - NULL, /* cast_object */ + zend_std_cast_object_tostring, /* cast_object */ NULL, /* count_elements */ };
« previous php.internals (#16388) next »