Bug #60067 [Fbk->NoF]: Strange Recursive/interation
Edit report at https://bugs.php.net/bug.php?id=60067&edit=1
ID: 60067
Updated by: php-bugs@lists.php.net
Reported by: bigorangemachine at hotmail dot com
Summary: Strange Recursive/interation
-Status: Feedback
+Status: No Feedback
Type: Bug
Package: Variables related
Operating System: Linux CGI/FastCGI
PHP Version: 5.3.8
Assigned To: cmb
Private report: N
New Comment:
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.
Previous Comments:
------------------------------------------------------------------------
[2015-06-05 17:20:38] cmb@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
To clarify: we do not need a script that works, but rather a script that allows us to reproduce the
bug â ideally by simply executing this script, what implies that the script is self-contained.
------------------------------------------------------------------------
[2011-10-16 02:12:24] bigorangemachine at hotmail dot com
FROM (corrected):
if(@in_array($k,$exclude_keys,true)){
if($_type=='object'){
if(!basic_check($omit_str)){unset($obj->{$k});}
else{$obj->{$k}=$omit_str;}
}else if($_type=='array'){
if(!basic_check($omit_str)){unset($obj[$k]);}
else{$obj[$k]=$omit_str;}
}
}else{
if(gettype($v)=='object' && ($v instanceof Traversable)){//
log_clean($obj->{$k},$exclude_keys,$omit_str);}
else if(gettype($v)=='array'){
log_clean($obj[$k],$exclude_keys,$omit_str);}
}
TO (shortened):
if(@in_array($k,$exclude_keys,true)){
if(!basic_check($omit_str)){unset($v);}
else{$v=$omit_str;}
}else{
log_clean($v,$exclude_keys,$omit_str);
}
I changed using $obj[$k] ( and $obj->{$k} [sorry for the syntax error]) to just using $v in the
function log_clean(). This is my first bug report. Sorry if I don't have the format correct.
------------------------------------------------------------------------
[2011-10-16 01:15:57] anonymous at anonymous dot anonymous
Needs an SSCCE: http://sscce.org/
------------------------------------------------------------------------
[2011-10-15 19:39:27] bigorangemachine at hotmail dot com
Description:
------------
I wrote an OOP PHP class to interact with an Shipping estimate API. I setup a logging system to
help log & track any issues during testing.
The goal was to have this logging system remove certain index keys for both 'objects' and
'arrays' in a recursive manor.
I believe that the passed-reference (variable using with an ampersand or what I call a 'live
link') is being 'pushed' up.
When I check the logged xml (in the example) it often read 'omitted'. The variable was
being changed even though the original call to function wasn't done using a passed-reference.
The function would work correctly with the corrected code or the log_xml calls completed first.
Maybe using $v is what broke the pass reference and it was just a 'copy' after that.
Test script:
---------------
Code Sample Here
http://pastebin.com/GcZMkD6B
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=60067&edit=1
Thread (5 messages)