ホームページ  >  記事  >  バックエンド開発  >  PHP の匿名関数にこれを指定する方法

PHP の匿名関数にこれを指定する方法

autoload
autoload転載
2021-04-06 16:45:192216ブラウズ

PHP の匿名関数にこれを指定する方法

クロージャ匿名関数に関して、JS でよくある問題は、それを this スコープにバインドすることです。実際、この問題は、次のコードのような PHP にも存在します。

$func = function($say){
    echo $this->name, ':', $say, PHP_EOL;
};
$func('good'); // Fatal error: Uncaught Error: Using $this when not in object context

この匿名関数では、$this->name を使用して取得します。現在のスコープ内の $name 属性ですが、この $this は誰ですか?定義していないため、エラーはここで直接報告されます。エラー メッセージは次のとおりです。 $this は使用されていますが、オブジェクト コンテキストがありません。つまり、$this 参照のスコープが指定されていません。

1.bindTo() メソッド バインディング $this

$func = $func->bindTo($lily, 'Lily');
// $func = $func->bindTo($lily, Lily::class);
// $func = $func->bindTo($lily, $lily);
$func1('cool');

今度は正常に出力できました。 bindTo() このメソッドは、現在のクロージャ オブジェクトをコピーし、それを $this スコープとクラス スコープにバインドします。

  • $lily パラメーターは object $newthis パラメーターであり、このコピーされた匿名関数に対して $this を指定します。

  • # 'Lily' は、型を表す新しいクラス スコープをバインドし、この匿名関数で呼び出すことができるプライベート メソッドと保護されたメソッドを決定します

このパラメータが指定されていない場合、この

private:

$func1 = $func->bindTo($lily);
$func1('cool2'); // Fatal error: Uncaught Error: Cannot access private property Lily::$name

2.call() の

$name 属性にアクセスできません。メソッド バインディング $this

$func->call($lily, 'well'); // Lily:well

推奨: 2021 PHP 面接の質問まとめ (コレクション) 》《php ビデオ チュートリアル

以上がPHP の匿名関数にこれを指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はimooc.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。