This code:
<?php
class TestClass {
public $myself;
function __construct () {
$this->myself = $this;
}
}
$TestObj = new TestClass ();
if ( $TestObj->myself == $TestObj ) {
echo "They are same.\n";
}
?>
Gives me a "Fatal error: Nesting level too deep - recursive dependency?"
on line #13: if ( $TestObj->myself == ...)
Could this be a PHP bug or I'm doing something wrong?
FYI:
PHP Version 5.0.2
PHP API 20031224
PHP Extension 20040412
Zend Extension 220040412
Server API Apache 2.0 Handler
Are you using zend.zend1_compatibility_mode on?
Andi
At 05:39 PM 10/18/2004 +0200, Francisco M. Marzoa Alonso wrote:
This code:
<?php
class TestClass {
public $myself;function __construct () { $this->myself = $this; }
}
$TestObj = new TestClass ();
if ( $TestObj->myself == $TestObj ) {
echo "They are same.\n";
}?>
Gives me a "Fatal error: Nesting level too deep - recursive dependency?"
on line #13: if ( $TestObj->myself == ...)Could this be a PHP bug or I'm doing something wrong?
FYI:
PHP Version 5.0.2
PHP API 20031224
PHP Extension 20040412
Zend Extension 220040412
Server API Apache 2.0 Handler
Andi Gutmans wrote:
Are you using zend.zend1_compatibility_mode on?
Andi
The same apparent bug exists on my windows xp system, independent of the
sapi, with zend1_compatibility off. It was also in the 5.0.0 release,
so is not an introduction since then.
Greg
If you use '===' it works as expected. I don't know if the fact that '=='
doesn't work is a bug or not, however.
Benj Carson
This code:
<?php
class TestClass {
public $myself;function __construct () { $this->myself = $this; }
}
$TestObj = new TestClass ();
if ( $TestObj->myself == $TestObj ) {
echo "They are same.\n";
}?>
Gives me a "Fatal error: Nesting level too deep - recursive dependency?"
on line #13: if ( $TestObj->myself == ...)Could this be a PHP bug or I'm doing something wrong?
FYI:
PHP Version 5.0.2
PHP API 20031224
PHP Extension 20040412
Zend Extension 220040412
Server API Apache 2.0 Handler
I first stumbled upon this problem in one of the RCs for PHP 5, but at the
time I thought I was at fault...
Consider the documentation at
http://www.php.net/manual/en/language.oop5.object-comparison.php : the
documentation is a little vague, but it does say "Two object instances are
equal if they have the same attributes and values, and are instances of the
same class." Thus explaining the recursive loop...
Maybe write a big flashing note in the documentation instead about this
trap?
Jevon
----- Original Message -----
From: "Benj Carson" benjcarson@digitaljunkies.ca
To: internals@lists.php.net
Sent: Tuesday, October 19, 2004 5:51 PM
Subject: Re: [PHP-DEV] Nesting level too deep - recursive dependency?
If you use '===' it works as expected. I don't know if the fact that '=='
doesn't work is a bug or not, however.Benj Carson
This code:
<?php
class TestClass {
public $myself;function __construct () { $this->myself = $this; }
}
$TestObj = new TestClass ();
if ( $TestObj->myself == $TestObj ) {
echo "They are same.\n";
}?>
Gives me a "Fatal error: Nesting level too deep - recursive dependency?"
on line #13: if ( $TestObj->myself == ...)Could this be a PHP bug or I'm doing something wrong?
FYI:
PHP Version 5.0.2
PHP API 20031224
PHP Extension 20040412
Zend Extension 220040412
Server API Apache 2.0 Handler
Jevon Wright wrote:
I first stumbled upon this problem in one of the RCs for PHP 5, but at the
time I thought I was at fault...Consider the documentation at
http://www.php.net/manual/en/language.oop5.object-comparison.php : the
documentation is a little vague, but it does say "Two object instances are
equal if they have the same attributes and values, and are instances of the
same class." Thus explaining the recursive loop...Maybe write a big flashing note in the documentation instead about this
trap?
Better, if two values satisfy ===, they are clearly ==. I would imagine
it would not be expensive to simply do a === check before doing the ==
check in the engine?
Greg
The reason is that == compares the elements as opposed to === which
compares the object handles.
We get infinite recursion comparing these two because the object points at
itself.
I'm not sure if there's a good way of solving that.
Do you really want == ordoes === do the job for you?
Andi
At 05:39 PM 10/18/2004 +0200, Francisco M. Marzoa Alonso wrote:
This code:
<?php
class TestClass {
public $myself;function __construct () { $this->myself = $this; }
}
$TestObj = new TestClass ();
if ( $TestObj->myself == $TestObj ) {
echo "They are same.\n";
}?>
Gives me a "Fatal error: Nesting level too deep - recursive dependency?"
on line #13: if ( $TestObj->myself == ...)Could this be a PHP bug or I'm doing something wrong?
FYI:
PHP Version 5.0.2
PHP API 20031224
PHP Extension 20040412
Zend Extension 220040412
Server API Apache 2.0 Handler
Fixed in CVS.
At 05:39 PM 10/18/2004 +0200, Francisco M. Marzoa Alonso wrote:
This code:
<?php
class TestClass {
public $myself;function __construct () { $this->myself = $this; }
}
$TestObj = new TestClass ();
if ( $TestObj->myself == $TestObj ) {
echo "They are same.\n";
}?>
Gives me a "Fatal error: Nesting level too deep - recursive dependency?"
on line #13: if ( $TestObj->myself == ...)Could this be a PHP bug or I'm doing something wrong?
FYI:
PHP Version 5.0.2
PHP API 20031224
PHP Extension 20040412
Zend Extension 220040412
Server API Apache 2.0 Handler