note 101697 added to ref.classobj
| From: | Skydev at osu1 dot php dot net | 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