|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2011-10-15 19:39 UTC] 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 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 14:00:01 2025 UTC |
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.