2012-09-12 95 views
0

標題可能有點令人困惑,所以讓我解釋一下。我有一個課程和一個方法。那個方法本身就有一個功能。就像這樣:在嵌套函數中使用靜態方法中的變量

class MyClass { 
    public static function my_function($param) { 
     function nested_function() { 
     //do something with $param 
     } 
    } 
} 

所以我的問題是,我怎麼能訪問nested_function$param

編輯

我這樣做的原因是因爲一個WordPress的事情。我需要這樣的東西:

class MyClass { 
    public static function my_function($param) { 
     function nested_function() { 
     //do something with $param 
     } 

     add_action('init', 'nested_function'); 
    } 
} 
+1

'函數nested_function($ PARAM)使用($ PARAM){//代碼在這裏} ' –

+0

@NB不能與**命名**全局函數一起使用。 – deceze

回答

4

這不是一個明智的做法。 PHP中所有命名的函數都是全局的。將它們嵌入其他內容只會使其聲明有條件。即直到撥打MyClass::my_function,才能撥打nested_function。之後,您不能再次調用MyClass::my_function,因爲PHP將嘗試重新聲明現有函數。

也許你想要一個倒閉,即一個匿名功能,它可以包括從父範圍變量:

public static function my_function($param) { 
    $nested_function = function() use ($param) { 
     //do something with $param 
    }; 
} 
+0

嗨!謝謝,我之所以這樣做是因爲我在做wordpress的事情。我需要使用add_action。我會更新我的問題。 – tbleckert

+0

這似乎是一個可怕的約定Wordpress在那裏不允許對象或匿名函數作爲回調。如果課程方法有效,您可以嘗試''MyClass :: some_callback'',那麼你可以通過一個class屬性來傳遞變量。否則,似乎只有'全球'可以幫助你(*不寒而慄*)。 – deceze

+0

那麼匿名函數確實有效!謝謝!有一個問題,從哪個PHP版本開始工作? – tbleckert