我在函数内部有一个函数,而内部函数找不到外部类。我不知道为什么我希望有人对如何解决这个问题有所了解。我不想在外部函数之外声明内部函数。
class Foo {
public $test = "test123";
private function outerfunction(){
function innerfunction(){
echo $this->test;
}
innerfunction();
}
}
如果我调用内部函数,则会收到错误Using $this when not in object context
。
答案 0 :(得分:3)
只需将其重组为匿名函数:
$innerfunction = function () {
echo $this->test;
}
$innerfunction();
然后将类上下文自动绑定到该函数(另请参见http://php.net/manual/en/functions.anonymous.php) 请注意,这仅适用于> = PHP 5.4
答案 1 :(得分:2)
您必须将其声明为变量,否则它将告诉您您不在对象上下文中:
$innerfunction = function() {
echo $this->test;
};
call_user_func($innerfunction);
或者,您可以像平时一样保留该函数,并将其传递给对象上下文,因为它在调用点是已知的:
function innerfunction(/* Foo */ $obj) {
echo $obj->test;
};
innerfunction($this);
答案 2 :(得分:1)
此方法最明显的问题是多次调用outerFunction()
会产生:
致命错误:无法重新声明innerfunction()...
另一个问题是innerfunction()
是在全局范围内声明的。如果这是故意的,那么这非常不合常规,您可能不应该这样做。无论如何,它允许这样做:
class Foo {
public $test = "test123";
public function outerfunction(){
function innerfunction(){
//echo $this->test;
}
innerfunction();
}
}
$a = new foo();
// innerfunction(); // NOPE!
$a->outerFunction();
innerfunction(); // YES
因此,这是声明innerfunction()
的逻辑方法:
class Foo {
public $test = "test123";
public function outerfunction(){
$this->innerfunction();
}
private function innerfunction(){
echo $this->test;
}
}
$a = new foo();
$a->outerFunction();