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: *Programming Data Structures
Operating System: linux
PHP Version: 5.4.3
Block user comment: N
Private report: N
New Comment:
Didn't see your reply, that sounds good Felipe.., will check it out tomorrow..
thanks.
Previous Comments:
------------------------------------------------------------------------
[2012-06-03 21:36:33] ray dot burgemeestre at gmail dot com
@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;.
------------------------------------------------------------------------
[2012-06-03 21:31:12] [email protected]
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