[英]PHP Manual Example #6 Static variables with recursive functions variation scope understanding
[英]Naming variables in recursive functions
我的遞歸函數接收變量$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。
您可以毫無問題地使用Example1。
變量$b
在函數的范圍內,因此在函數內的任何位置都可用。
由於您再次調用函數,因此您可以考慮從該函數創建一個新實例(即使從技術上來說, instance
也不是描述它的正確詞,但為了解釋起見,它是可行的)。 此實例不知道他收到的$b
與前面的實例相同且命名相同。
同樣因為您沒有通過引用粘貼它們,所以在一個函數調用中對$b
所做的任何更改都不會在其他調用中進行任何更改,而是在您從更改了$b
的函數進行調用的調用中進行任何更改。 因此,這意味着如果您將每個引用中的它們都賦予$a
,那么最后將對其進行更改。
不,您不必使用其他名稱傳遞變量。 變量$b
僅存在於函數內部。 因此,如果您再次調用該函數
看一下變量范圍: PHP手冊
在函數內部,您可以在作用域內重用變量名,作用域是函數的開始-結束。 如果您遞歸調用函數,則內部作用域不會影響外部作用域。
考慮功能:
function decrements($b) {
print "pre call $b={$b}\n\r";
if($b>0) decrements(--$b);
print "post call $b={$b}\n\r";
}
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.