2017-07-02 79 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

相關問題