如何在嵌套函数

时间:2015-07-28 07:40:15

标签: php function class oop

为什么嵌套函数中无法访问类属性?那我该如何使用呢?

class MyClass
{
    public $var = "I'm a class property!";

    public function Test()
    {
        function SubTest()
        {
          // I need to $this->var; here
        }
    }

}

我想在echo$var SubTest()。有可能吗?

2 个答案:

答案 0 :(得分:1)

这样做怎么办?

<?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

答案 1 :(得分:1)

使用闭包怎么样?自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.");