如何在嵌套函数中使用类属性


how can I use of a class property in the nested function

为什么类属性在嵌套函数中不可访问?那么我该如何使用它呢?

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