我知道可以在另一個函數中創建一個函數。爲什麼人們需要在現實生活中做到這一點? (PHP)在函數中創建函數有什麼用處?
function someFunction($var)
{
function anotherFunction()
{
return M_PI;
}
return anotherFunction();
}
我知道可以在另一個函數中創建一個函數。爲什麼人們需要在現實生活中做到這一點? (PHP)在函數中創建函數有什麼用處?
function someFunction($var)
{
function anotherFunction()
{
return M_PI;
}
return anotherFunction();
}
你曾經真的要定義另一個函數的內部函數的唯一情況是,如果你不想這樣,直到外部功能提供給任何內部函數被調用。
function load_my_library() {
...
function unload_my_library() {
}
}
你需要(或希望)unload_my_library
是唯一可用的時間是庫加載後。
+1我將這看作是有條件創建函數的邏輯擴展,即if(...){function foo(){...}}。爲了代碼組織的目的,將其嵌入另一個函數而不是「if」可能會派上用場。 「有條件的功能」在某些情況下非常方便,其中最常用的功能之一就是對舊版本的PHP進行必要的功能改進。 – deceze
通常不應該使用嵌套函數。類和公共/私人方法更加乾淨地解決了相同類型的問題。
然而,函數生成函數可能是有用的:
<?php
# requires php 5.3+
function make_adder($a)
{
return function($b) use($a) {
return $a + $b;
};
}
$plus_one = make_adder(1);
$plus_fortytwo = make_adder(42);
echo $plus_one(3)."\n"; // 4
echo $plus_fortytwo(10)."\n"; // 52
?>
這個例子是人爲的和愚蠢的,但這樣的事情可以是用於產生由排序例程使用的功能是有用的,等等
我在這裏猜測,但我相信它用於將函數傳遞給另一個函數來執行。例如,調用搜索函數,您可以在其中指定回調函數以執行搜索順序比較。這將允許您將比較器封裝在外部函數中。
http://www.php.net/manual/en/language.functions.php#21150 – Sampson
這不是說這回答*爲什麼*,但正如在每種語言中,有一些功能你只是不應該或不應該'使用。這是我書中的一個。 – seanmonstar