2012-09-12 56 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