note 92713 deleted from function.debug-backtrace by danbrown
| From: | danbrown@php.net | Date: | Fri, 09 Apr 2010 00:25:27 +0000 |
| Subject: | note 92713 deleted from function.debug-backtrace by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-168051@lists.php.net to get a copy of this message | ||
Note Submitter: profix at cms-studio dot net
----
Maybe it can be useful ... :)
<?
function IsRecursiveCall()
{
$ret=false;
$cc=debug_backtrace();
$thisfunction=array_shift($cc);
if ($callerfunction=array_shift($cc))
{
$name=$callerfunction["function"];
reset($cc);
while ($cx=each($cc))
if ($ret=($cx["value"]["function"]==$name))
break;
}
return $ret;
}
function GetRecursiveCallLevel()
{
$ret=0;
$cc=debug_backtrace();
$thisfunction=array_shift($cc);
if ($callerfunction=array_shift($cc))
{
$name=$callerfunction["function"];
reset($cc);
while ($cx=each($cc))
if ($cx["value"]["function"]==$name)
$ret++;
}
return $ret;
}
// -- example --------------------------
function RecursiveFunction()
{
echo "Recursive function begin.\n";
$level=GetRecursiveCallLevel();
echo "Recursive level is: ".$level."\n";
echo "Is it recursive ? ";
if (IsRecursiveCall()) echo "yes"; else echo "no";
echo "\n";
if ($level<5)
RecursiveFunction();
echo "Recursive function end.\n";
}
// -----------------------
echo "<pre>\n";
RecursiveFunction();
echo "</pre>\n";
?>
Output is:
Recursive function begin.
Recursive level is: 0
Is it recursive ? no
Recursive function begin.
Recursive level is: 1
Is it recursive ? yes
Recursive function begin.
Recursive level is: 2
Is it recursive ? yes
Recursive function begin.
Recursive level is: 3
Is it recursive ? yes
Recursive function begin.
Recursive level is: 4
Is it recursive ? yes
Recursive function begin.
Recursive level is: 5
Is it recursive ? yes
Recursive function end.
Recursive function end.
Recursive function end.
Recursive function end.
Recursive function end.
Recursive function end.