我们只能在类的构造函数中定义匿名函数吗?

时间:2017-07-02 13:43:57

标签: php

<?php 
class Foo
{
    public $bar;
    public $var;

    public function __construct() {
        $this->bar = function() {
            return 42;
        };
    }

    public function test(){
        $this->var = function() {
            return 44;
        };
    }
}

$obj = new Foo();
echo ($obj->bar)(), "<br/>";
var_dump($obj->test());

?>

输出:42
        NULL

我在做错了,我想在44测试函数中得到var值。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:2)

使用此方法调用$obj->test(),您只需将一个函数分配给实例变量$var。这就是为什么当你var_dump($obj->test());时,它会显示NULL,因为该方法不会返回任何内容。

相反,您可以做的是,从$this方法返回test()并使用当前实例来调用该匿名函数,如下所示:

class Foo{
    public $bar;
    public $var;

    public function __construct() {
        $this->bar = function() {
            return 42;
        };
    }

    public function test(){
        $this->var = function() {
            return 44;
        };
        return $this;
    }
}

$obj = new Foo();
echo ($obj->bar)(), "<br/>";
echo ($obj->test()->var)();

此处the demo