我的递归函数接收变量$a
作为参数,将其记忆为$b
,然后传递给自己。
问题:
如果我递归调用一个函数,那么我传递给递归调用的变量(函数的第4行)是否与存储的变量(功能的第1行)同名?
示例1
$a = "bob";
function do_someting($b)
{
echo $b;
if ($b == 'bob') {
do_something($b);
}
}
do_something($a);
或者我必须传递一个具有不同名称的变量(此函数的第4行和第5行)?
示例2
function do_someting($b)
{
echo $b;
if ($b == 'bob') {
$c = $b;
do_something($c);
}
}
这里给出的函数将导致一个无限循环。这不是我真正的代码,只是一个例子来说明我的问题不要运行它。
示例1运行良好。当您传递$b时,接收函数只接收$b的副本,因此当接收函数修改它时,它不会影响原始的$b。
看看变量范围:PHP手动
在函数内部,您可以在作用域内重用变量名,作用域是函数的起始端。若递归调用函数,那个么内部作用域不会影响外部作用域。
考虑功能:
function decrements($b) {
print "pre call $b={$b}nr";
if($b>0) decrements(--$b);
print "post call $b={$b}nr";
}
decrements(4);
输出为:
pre call 4=4
pre call 3=3
pre call 2=2
pre call 1=1
pre call 0=0
post call 0=0
post call 0=0
post call 1=1
post call 2=2
post call 3=3
如果你插入$b=4
decrements($b) { //$b = 4
decrements($b) { //$b = 3
decrements($b) { //$b = 2
decrements($b) { //$b = 1
decrements($b) { //$b = 0
} //$b = 0
} //$b = 0
} //$b = 1
} //$b = 2
} //$b = 3
您可以毫无问题地使用Example1。
变量$b
在您的函数范围内,因此它在函数中的任何位置都可用。
由于您再次调用函数,您可以考虑从该函数创建一个新实例(我想,即使从技术上讲instance
也不是描述它的合适词,但为了解释它是有效的)。这个实例不知道他收到的$b
与之前的实例相同,名称也相同。
另外,因为您没有通过引用粘贴它们,所以在一个函数调用中对$b
的任何更改都不会改变其他调用中的任何内容,而是在将从更改$b
的函数调用的调用中。因此,这意味着,如果你在每个引用中给出它们,$a
将在最后更改。
不,您不必传递具有不同名称的变量。变量$b
就在函数内部"存在"。因此,如果您再次调用函数