2017-07-02 118 views
0
<?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我们只能在类的构造函数中定义匿名函数吗?

我哪里做错了我想要得到的VAR值测试功能在其内部44

预先感谢您的回答。

+1

'$ obj-> test()'只是将一个函数赋值给一个变量,它不会执行这个函数。 –

回答

2

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

相反,你可以做的是,从test()方法返回$this并使用当前实例调用该匿名函数,像这样:

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

相关问题