2016-08-27 8 views
0

私はこのようなコードを持っている:

class Foo { 
    var $callbacks = array(); 
    function __construct() { 
     $this->callbacks[] = function($arg) { 
     return $this->bar($arg); 
     }; 
    } 
    function bar($arg) { 
     return $arg * $arg; 
    } 
} 

と私は、この内部クロージャを$使用したい、私はuse ($this)を追加しようとしましたが、このスローエラー:

Cannot use $this as lexical variable 
+0

どのPHPバージョンをお使いですか?それは「5.3」ですか? – BVengerov

+0

@BVengerov次に、彼はPHPが解析エラーを投げるという問題を抱えていました。 –

答えて

1

あなたは$thisを使用することはできません。 $thisにコピーを作成し、use言語構成に渡します。

class Foo { 
    var $callbacks = array(); 
    function __construct() { 
     $class = $this; 
     $this->callbacks[] = function($arg) use ($class) { 
     return $class->bar($arg); 
     }; 
    } 
    function bar($arg) { 
     return $arg * $arg; 
    } 
} 
1

は別の$これを与えますvarとそれを使用します。これはクラスインスタンス自体への参照内部クラスの明示的な予約変数であるよう

class Foo 
{ 
    public function bar() 
    { 
     $another = $this; 
     return function() use($another) 
     { 
      print_r($another); 
     }; 
    } 
} 
関連する問題