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

 ID:                 62171
 Comment by:         marc-bennewitz at arcor dot de
 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:

I have the same issue in a logger method stringify all values into a readable 
format (Zend\Log\Formatter\Base::normalize) which ever fail if the value 
contains a self referencing entry. It's simply not possible to check this case 
so in will result in an infinite loop or we get the fatal here described.

AND on logging using the error handler there is a $context argument containing 
such a self reference :(


Previous Comments:
------------------------------------------------------------------------
[2012-06-03 21:40:25] ray dot burgemeestre at gmail dot com

Didn't see your reply, that sounds good Felipe.., will check it out tomorrow.. 
thanks.

------------------------------------------------------------------------
[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] 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.

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=62171


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

Reply via email to