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

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

autoload
リリース: 2023-03-09 10:34:02
転載
2253 人が閲覧しました

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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート