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