Bug #16614 Updated: Function called from class treats GLOBAL vars in different way...

From: Date: Sat, 01 Jun 2002 14:07:49 +0000
Subject: Bug #16614 Updated: Function called from class treats GLOBAL vars in different way...
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-9064@lists.php.net to get a copy of this message
ID: 16614 Updated by: mfischer@php.net Reported By: daniel@webdevelopers.cz -Status: Open +Status: Closed Bug Type: Class/Object related Operating System: Windows 2000, Windows XP PHP Version: 4.1.2 New Comment: Variables imported with global into the local function scope are actually references and therefore can't be assigned to another reference. $GLOBAL is a good workaround for this However this isn't necessary for ZE2 because you don't need to pass objects by reference anymore (there's no shallowing coping going on anymore). Previous Comments: ------------------------------------------------------------------------ [2002-04-15 10:08:21] vmg@arachnion.de This error is reproducable for PHP 4.2.0rc1: First version ($GLOBALS["obj"]=&$ref;) gives: object(test)(0) { } Second version ($obj=&$ref;) gives: NULL ------------------------------------------------------------------------ [2002-04-15 05:53:47] daniel@webdevelopers.cz There is the line marked with '#*' in the following script. One line up you will find other line that should make the exactly same action (I think). Try to comment this line and uncomment line with '#*'. The output will differ. Why? --- SCRIPT: START --- <PRE><?php class test { function test() { extfunc($this); } } #___________________________________________________________ function extfunc(&$ref) { global $obj; $GLOBALS["obj"]=&$ref; # This is the same as '$obj=&$ref;'. Isn't it? #* $obj=&$ref; } #=========================================================== $test=new test(); var_dump($obj); ?></PRE> --- SCRIPT: END --- ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=16614&edit=1

« previous php.bugs (#9064) next »