ID: 22367 User updated by: stanislav dot chachkov at epfl dot ch Reported By: stanislav dot chachkov at epfl dot ch Status: Verified Bug Type: Scripting Engine problem Operating System: Solaris8 PHP Version: 4.3.2-dev New Comment:
1) This code works fine with previous version (4.2.2) 2) What exactly in this code is 'weird'/'irrealistic'? I'm ready to explain you how does it works, or else you can ask any people who deals with object orientation at php 3) It is really a problem for me, because i have a broken web site just because i did an update from v4.2.2 to v4.3.2 to use GD image lib. Best regards. Previous Comments: ------------------------------------------------------------------------ [2003-02-23 18:01:01] [EMAIL PROTECTED] I do get similar results plus some leaks with your example..but your example is quite weird code which really shouldn't work anyway. :) And btw. undefined variables have 'value' of NULL.. (unset($var) is same as doing $var = NULL;) Testing whether a variable exists should always be done with 'isset()'. Leaving as verified but I'm not sure if this will ever get 'fixed'. (try come up with some more realistic example?) ------------------------------------------------------------------------ [2003-02-23 13:16:25] stanislav dot chachkov at epfl dot ch This is the test case: <? class A{ var $fields; function getID(){ return $this->getColumnValue($this->getPK()); } function getColumnValue($col_name){ return $this->fields[$col_name]; } function save(){ $this->getID(); $i=333; echo "Dump of z: "; var_dump($z); echo "<br>z="; echo $z; echo "<br>"; if($boo){ echo "undefined is now defined<br>"; }else{ echo "undefined is undefined<br>"; } $s1="YES"; $s2="NO"; echo "s1=$s1, s2=$s2"; } } class B extends A{ function getPK(){ return "ID"; } function &getColumnValue($col_name){ return parent::getColumnValue($col_name); } } $b=new B(); if(!$b->getID()){} $b->save(); ?> The output that we have is: Dump of z: NULL z=333 undefined is now defined s1=NO, s2=NO ------------------------------------------------------------------------ [2003-02-23 11:56:04] stanislav dot chachkov at epfl dot ch Exactly the same behaviour with php 4.3.2-dev We will try to write a simple test case ------------------------------------------------------------------------ [2003-02-23 01:26:27] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php4-STABLE-latest.tar.gz For Windows: http://snaps.php.net/win32/php4-win32-STABLE-latest.zip It might have been fixed. If not, then put that long example somewhere to be downloaded and add the url here. ------------------------------------------------------------------------ [2003-02-21 17:31:45] stanislav dot chachkov at epfl dot ch In a method we have that ($a is undefined, but this also works if you substitute $a by any other name): function getColumnValue($col_name){ var_dump($a); echo "a=$a <br>"; ... } This method is called a number of times and the output is like this: NULL a= NULL a= ... NULL a=Etape_Editor_IDEtape_Editor_ID'' Actually "EtapeEditor_ID" was the parameter of PREVIOUS call to one of methods of this class. I can not reproduce this problem with a short script, it seems that it appears only when the number of classes, objects and calls is large, otherwise it works fine. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=22367&edit=1