2010-02-16 31 views
1

我知道可以在另一個函數中創建一個函數。爲什麼人們需要在現實生活中做到這一點? (PHP)在函數中創建函數有什麼用處?

function someFunction($var) 
{ 
    function anotherFunction() 
    { 
     return M_PI; 
    } 

    return anotherFunction(); 
} 
+1

http://www.php.net/manual/en/language.functions.php#21150 – Sampson

+0

這不是說這回答*爲什麼*,但正如在每種語言中,有一些功能你只是不應該或不應該'使用。這是我書中的一個。 – seanmonstar

回答

4

你曾經真的要定義另一個函數的內部函數的唯一情況是,如果你不想這樣,直到外部功能提供給任何內部函數被調用。

function load_my_library() { 
    ... 

    function unload_my_library() { 
    } 
} 

你需要(或希望)unload_my_library是唯一可用的時間是庫加載後。

+2

+1我將這看作是有條件創建函數的邏輯擴展,即if(...){function foo(){...}}。爲了代碼組織的目的,將其嵌入另一個函數而不是「if」可能會派上用場。 「有條件的功能」在某些情況下非常方便,其中最常用的功能之一就是對舊版本的PHP進行必要的功能改進。 – deceze

1

通常不應該使用嵌套函數。類和公共/私人方法更加乾淨地解決了相同類型的問題。

然而,函數生成函數可能是有用的:

<?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 

?> 

這個例子是人爲的和愚蠢的,但這樣的事情可以是用於產生由排序例程使用的功能是有用的,等等

0

我在這裏猜測,但我相信它用於將函數傳遞給另一個函數來執行。例如,調用搜索函數,您可以在其中指定回調函數以執行搜索順序比較。這將允許您將比較器封裝在外部函數中。