特定のコンテキストでの意味を変更するために、クロージャ オブジェクトでbindメソッドを使用できます。this
この機能は PHP 5.4 で利用可能になったことに注意してください。
公式説明
特定のバインドされたオブジェクトとクラス スコープを持つクロージャを複製します
class TestClass {
protected $var1 = "World";
}
$a = new TestClass();
$func = function($a){ echo $a." ".$this->var1; };
$boundFunction = Closure::bind($func, $a, 'TestClass');
$boundFunction("Hello");
// outputs Hello World
この構文の代わりに、クロージャ (無名関数) のインスタンスの bindTo メソッドを使用します。
class TestClass {
protected $var1 = "World";
}
$a = new TestClass();
$func = function($a){ echo $a." ".$this->var1; };
$boundFunction = $func->bindTo($a, $a);
$boundFunction("Hello");
// outputs Hello World
あなたの例では、関連するコードは次のようになります
$test = function() {
echo $this->name;
};
$user = new stdclass;
$user->name = "John Doe";
$bound = $test->bindTo($user, $user);
call_user_func($bound);