note 101697 added to ref.classobj

From: Date: Wed, 05 Jan 2011 19:40:05 +0000
Subject: note 101697 added to ref.classobj
Groups: php.notes 
Request: Send a blank email to php-notes+get-175467@lists.php.net to get a copy of this message
A small function that allows finding all references to the object. Written in 3 minutes and may be buggy (for ex pass object as reference in some places?) <?php function find_ref_obj($object, $obj, $path) { if (in_array($obj,$GLOBALS['__REF_CHECKED'],true)) return false; $GLOBALS['__REF_CHECKED'][]=$obj; $r = array(); foreach ((array)$obj as $k => $v) { if ($v === $object) $r[] = $path . "->$k"; if (is_object($v)) { $t = find_ref_obj($object,$v,$path . "->$k"); if ($t!==false) $r=array_merge($r,$t); } else if (is_array($v)) { $t = find_ref_arr($object,$v,$path . "->$k"); if ($t!==false) $r=array_merge($r,$t); } } if (empty($r)) return false; else return $r; } function find_ref_arr($object, $arr, $path) { if (in_array($arr,$GLOBALS['__REF_CHECKED'],true)) return false; $GLOBALS['__REF_CHECKED'][]=$arr; $r = array(); foreach ($arr as $k => $v) { if ($v === $object) $r[] = $path . "['$k']"; if (is_object($v)) { $t = find_ref_obj($object,$v,$path . "['$k']"); if ($t!==false) $r=array_merge($r,$t); } else if (is_array($v)) { $t = find_ref_arr($object,$v,$path . "['$k']"); if ($t!==false) $r=array_merge($r,$t); } } if (empty($r)) return false; else return $r; } function find_references($object) { $r = array(); $GLOBALS['__REF_CHECKED']=array(); foreach ($GLOBALS as $n => $v) if ($n!='__REF_CHECKED') if ($n!='GLOBALS') { if ($v === $object) $r[]=$n; if (is_object($v)) { $t = find_ref_obj($object,$v,$n); if ($t!==false) $r=array_merge($r,$t); } else if (is_array($v)) { $t = find_ref_arr($object,$v,$n); if ($t!==false) $r=array_merge($r,$t); } } unset($GLOBALS['__REF_CHECKED']); return $r; } function find_refs($object) { return implode(', ',find_references($object)); } ?> ---- Server IP: 69.147.83.197 Probable Submitter: 95.75.141.193 ---- Manual Page -- http://www.php.net/manual/en/ref.classobj.php Edit -- https://master.php.net/note/edit/101697 Del: integrated -- https://master.php.net/note/delete/101697/integrated Del: useless -- https://master.php.net/note/delete/101697/useless Del: bad code -- https://master.php.net/note/delete/101697/bad+code Del: spam -- https://master.php.net/note/delete/101697/spam Del: non-english -- https://master.php.net/note/delete/101697/non-english Del: in docs -- https://master.php.net/note/delete/101697/in+docs Del: other reasons-- https://master.php.net/note/delete/101697 Reject -- https://master.php.net/note/reject/101697 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#175467) next »