Php 我需要帮助理解在类方法中声明的函数的范围
好了,这已经烤了我一段时间的面条了。我有一个类,它有一个定义全局可访问函数的方法。我的问题是:内部类方法如何定义在全局范围内可访问的函数 以下是一个示例:Php 我需要帮助理解在类方法中声明的函数的范围,php,scope,Php,Scope,好了,这已经烤了我一段时间的面条了。我有一个类,它有一个定义全局可访问函数的方法。我的问题是:内部类方法如何定义在全局范围内可访问的函数 以下是一个示例: class MyClass { // ... accessors, constuctors other methods, et al... // The method in question: private function myPrivateMethod() { if( !funct
class MyClass
{
// ... accessors, constuctors other methods, et al...
// The method in question:
private function myPrivateMethod()
{
if( !function_exists( 'someArbitraryFunction' ) )
{
function someArbitraryFunction( $args )
{
return "Hello, {$args} world!";
}
}
}
}
该类像往常一样在应用程序的早期被实例化,但它是在另一个类的方法中被实例化的。它是一个浅范围链,但嵌套得太多,以至于(对我来说)无法理解为什么它可以在应用程序之外访问。这与我对封装的理解背道而驰,一些见解将不胜感激 声明的函数将始终具有全局作用域。这不是JavaScript 见: 作为一种来自C/C++背景的语言,函数和方法之间有着截然不同的行为。在PHP中,函数不服从访问修饰符 不管它们写在代码中的什么位置,一旦执行通过声明,它就被定义了 如果您需要一个函数来遵循作用域,我强烈建议您更好地利用变量的GC,那么您可以在>=PHP5.3中使用闭包:
class MyClass{
private $myArbitraryMethod;
private function myPrivateMethod(){
$this->myArbitraryMethod = function($args){
}
}
}
我刚刚看到了这个,从文件来看,是设计的。。。我明白为什么它现在起作用了,但它似乎是错的。简单地把函数看作全局函数。如果您需要函数遵守作用域,我建议使用PHP5.3中的闭包。谢谢,我想这正是让我吃惊的地方。我现在明白了,我可以看到它是如何被滥用的。太棒了!我很高兴你把它弄清楚了。(:
class MyClass{
private $myArbitraryMethod;
private function myPrivateMethod(){
$this->myArbitraryMethod = function($args){
}
}
}