Nesting level too deep - recursive dependency?

php.internals

Francisco M. Marzoa Alonso

21 years ago
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

21 years ago
Are you using zend.zend1_compatibility_mode on? Andi At 05:39 PM 10/18/2004 +0200, Francisco M. Marzoa Alonso wrote:

Greg Beaver

21 years ago
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

Benj Carson

21 years ago
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 On October 18, 2004 09:39 am, Francisco M. Marzoa Alonso wrote:

Jevon Wright

21 years ago
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?

Greg Beaver

21 years ago
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

Andi Gutmans

21 years ago
At 10:10 AM 10/19/2004 -0400, Greg Beaver wrote:
>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?
That might actually be a good idea. It would definitely solve some headaches and be faster. Does anyone object to me doing this? Andi

Jevon Wright

21 years ago
That's a really elegant solution... I'm up for trying that out. Remember to do != too :) Jevon ----- Original Message ----- From: "Andi Gutmans" <andi@zend.com> To: "Greg Beaver" <cellog@php.net>; "Jevon Wright" <jevon@jevon.org> Cc: "Benj Carson" <benjcarson@digitaljunkies.ca>; <internals@lists.php.net> Sent: Wednesday, October 20, 2004 6:46 AM Subject: Re: [PHP-DEV] Nesting level too deep - recursive dependency?
> At 10:10 AM 10/19/2004 -0400, Greg Beaver wrote: > >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

Andi Gutmans

21 years ago
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:

Andi Gutmans

21 years ago
Fixed in CVS. At 05:39 PM 10/18/2004 +0200, Francisco M. Marzoa Alonso wrote: