为什么类属性在嵌套函数中不可访问?那么我该如何使用它呢?
class MyClass
{
public $var = "I'm a class property!";
public function Test()
{
function SubTest()
{
// I need to $this->var; here
}
}
}
我想在SubTest()
中加入echo
$var
。
使用闭包如何?自PHP 5.4起,$this
在闭包中可见。
除此之外,你不应该像这样在方法中定义函数。PHP函数是全局的,这意味着它们的行为方式与在外部声明的完全相同。
class MyClass
{
public $var = "I'm a class property!";
public function Test($str)
{
$callback = function() use ($str)
{
print_r($this->var . " " . $str);
};
return call_user_func($callback);
}
}
$a = new MyClass();
$a->Test("My name is not Foo.");
这样做怎么样?
<?php
class MyClass{
public $var = "I'm a class property!";
public function Test(){
function SubTest(&$father){
$father->var = 'something else';
echo 'here ! '.$father->var.'<br />';
}
echo $this->var.'<br />';
SubTest($this);
echo $this->var.'<br />';
}
}
$test = new MyClass();
echo $test->var.'<br />';
$test->Test();
?>
给出如下结果:
I'm a class property!
I'm a class property!
here ! something else
something else