Edit report at https://bugs.php.net/bug.php?id=62171&edit=1

 ID:                 62171
 User updated by:    ray dot burgemeestre at gmail dot com
 Reported by:        ray dot burgemeestre at gmail dot com
 Summary:            "Nesting level too deep - recursive dependency?" in
                     case of ===
 Status:             Open
 Type:               Bug
-Package:            Scripting Engine problem
+Package:            *Programming Data Structures
 Operating System:   linux
 PHP Version:        5.4.3
 Block user comment: N
 Private report:     N

 New Comment:

@carloschilazo of course removing the & fixes the error. You realize this is a 
bugreport right?
My point is that I think the === operator should still return true or false. In 
this case true as $a and $a[0] are the same object.
My testcase was a little ambiguous, shiranai7's version is better:  $a = 
array(); $a[0] = &$a;.


Previous Comments:
------------------------------------------------------------------------
[2012-06-03 21:31:12] fel...@php.net

I've committed a change that will return immediately true the comparison 
between same array. So, at least your '$a = array(&$a); $a === $a;' will works.

------------------------------------------------------------------------
[2012-06-03 20:54:27] carloschilazo at gmail dot com

I think the problem is your test script:

<?php
$a = array(&$a); <<<<<<< HERE
$a === $a;
?>

you are passing the value of $a by reference, and to invoke the value then it 
calls itself.

remove the & and it works

------------------------------------------------------------------------
[2012-05-28 15:56:06] shiranai7 at hotmail dot com

I can confirm this on Windows. I also tried more cases:

For arrays: $a = array(); $a[0] = &$a;
For objects: $a = new stdClass; $a->b = &$a;

Results for comparisons of $a, $b

Type        PHP     Operator    Result
---------------------------------------------
arrays      4.4.5   ==          fatal
arrays      4.4.5   ===         fatal
objects     4.4.5   ==          fatal
objects     4.4.5   ===         fatal

arrays      5.2.6   ==          fatal
arrays      5.2.6   ===         fatal
objects     5.2.6   ==          true
objects     5.2.6   ===         true

arrays      5.3.5   ==          fatal
arrays      5.3.5   ===         fatal
objects     5.3.5   ==          true
objects     5.3.5   ===         true

arrays      5.4.3   ==          fatal
arrays      5.4.3   ===         fatal
objects     5.4.3   ==          true
objects     5.4.3   ===         true


So this was fixed (either intentionally or along with general changes to object 
handling) in PHP 5 for objects but not for arrays.

------------------------------------------------------------------------
[2012-05-27 14:40:33] ray dot burgemeestre at gmail dot com

Description:
------------
Is it expected behaviour that === can trigger a Nesting level too deep error?

Test script:
---------------
<?php
$a = array(&$a);
$a === $a;
?>

Expected result:
----------------
I would expect $a === $a to return true.

Actual result:
--------------
$ php test.php
PHP Fatal error:  Nesting level too deep - recursive dependency? in 
/srv/www/htdocs/test.php on line 3

Fatal error: Nesting level too deep - recursive dependency? in 
/srv/www/htdocs/test.php on line 3
$ php -v
PHP 5.4.3 (cli) (built: May 26 2012 22:29:08)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=62171&edit=1

Reply via email to