Bug #67807 [Com]: Object passed by reference becomes a string

From: Date: Fri, 08 Aug 2014 17:28:24 +0000
Subject: Bug #67807 [Com]: Object passed by reference becomes a string
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-187030@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=67807&edit=1 ID: 67807 Comment by: atlantisnova at gmail dot com Reported by: atlantisnova at gmail dot com Summary: Object passed by reference becomes a string Status: Feedback Type: Bug Package: Class/Object related Operating System: Debian Linux PHP Version: 5.4.4 Block user comment: N Private report: N New Comment: More info: my system is a virtualized debian 64 bit machine running on a Mac,,, the production server where we discovered the problem is an dedicated debian 64 box (php versions listed in original comment). Sorry for not posting the exact output before! Here's a modified script that shows the correct value of $b before the notice: class A{ function do_stuff(&$b) { var_dump('Before in function:', $b); $defined = 0; #trigger_error("If I fixed the undefined variable but enabled this line instead, it will also turn b from an object into a string! So user-triggered notices bork it as well."); $x = $undefined || $defined ? 14 : 0; var_dump('After in function:', $b); } } class B{} $a = new A(); $b = new B(); $a->do_stuff($b); var_dump('After function:', $b); --------------- output of above ------------------ string 'Before in function:' (length=19) object(B)[10] ( ! ) Notice: Undefined variable: undefined in /vagrant/src/temp.tmp.php on line 7 Call Stack # Time Memory Function Location 1 0.1017 4382640 {main}( ) ../temp.tmp.php:0 2 0.1018 4385776 A->do_stuff( ) ../temp.tmp.php:17 string 'After in function:' (length=18) string 'B' (length=1) string 'After function:' (length=15) string 'B' (length=1) Previous Comments: ------------------------------------------------------------------------ [2014-08-08 17:22:55] atlantisnova at gmail dot com Yes it's exact and sure here's the output: ( ! ) Notice: Undefined variable: undefined in /vagrant/src/temp.tmp.php on line 6 Call Stack # Time Memory Function Location 1 0.0631 4382248 {main}( ) ../temp.tmp.php:0 2 0.0631 4385384 A->do_stuff( ) ../temp.tmp.php:16 string 'In function:' (length=12) string 'B' (length=1) string 'After function:' (length=15) string 'B' (length=1) ------------------------------------------------------------------------ [2014-08-08 17:18:15] requinix@php.net http://3v4l.org/VqsdQ Works for me. That's the exact repro script you used? And rather than some description of the actual result, how about posting the actual, actual result? ------------------------------------------------------------------------ [2014-08-08 15:11:22] atlantisnova at gmail dot com Description: ------------ My version is PHP 5.4.4-14+deb7u7... Also affects PHP 5.4.4-14+deb7u11 - the production server we discovered it on. It seems that any sort of notice in a function into which an object has been passed by reference replaces the reference with a string containing its class name. Code executed after the pass-by-reference also receives the string rather than the original object. Thanks! Test script: --------------- class A{ function do_stuff(&$b) { $defined = 0; #trigger_error("If I fixed the undefined variable but enabled this line instead, it will also turn b from an object into a string! So user-triggered notices bork it as well."); $x = $undefined || $defined ? 14 : 0; var_dump('In function:', $b); } } class B{} $a = new A(); $b = new B(); $a->do_stuff($b); var_dump('After function:', $b); Expected result: ---------------- $b should be an object of class B Actual result: -------------- $b is the string 'B' ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=67807&edit=1

« previous php.bugs (#187030) next »