2017-07-02 8 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クラスのコンストラクタ内で匿名関数のみを定義できますか?

私が間違っているの

私はあなたの答えを事前に44

おかげでテスト関数内のvar値を取得したいです。

+1

'$ obj-> test()'は関数に変数を代入するだけで、この関数は実行されません。 –

答えて

2

このメソッド呼び出しでは、$obj->test()を呼び出すだけで、インスタンス変数$varに関数を割り当てるだけです。そのため、var_dump($obj->test());を実行すると、このメソッドは何も返さないため、NULLと表示されます。

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です:あなたが何ができるかを代わりに

test()方法から$thisを返すと、このような無名関数は、ことを呼び出すために、現在のインスタンスを使用し、です。

関連する問題