Bug #60067 [Opn->Fbk]: Strange Recursive/interation
| From: | cmb@php.net | Date: | Fri, 05 Jun 2015 17:20:39 +0000 |
| Subject: | Bug #60067 [Opn->Fbk]: Strange Recursive/interation | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-193153@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=60067&edit=1
ID: 60067
Updated by: cmb@php.net
Reported by: bigorangemachine at hotmail dot com
Summary: Strange Recursive/interation
-Status: Open
+Status: Feedback
Type: Bug
Package: Variables related
Operating System: Linux CGI/FastCGI
PHP Version: 5.3.8
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[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