検索

ホームページ  >  に質問  >  本文

カスタムメソッドパラメータをクラス属性にバインドする

<p>クラス内で、Ctrl キーを押しながらクリックしたときに双方向リンクが確立されるように、クラス属性をメソッド パラメータにバインドする方法はありますか? </p> <pre class="brush:php;toolbar:false;">クラスの添付ファイルはリポジトリを拡張します { パブリックドキュメント $documents; パブリック関数 fromDocuments(呼び出し可能な $scope) { $this->scopeOnRepoProperty($scope, 'documents'); } } </pre> <p>つまり、この場合、scopeOnRepoProperty() メソッドの 2 番目のパラメーター document はプロパティ $documents を参照する必要があるということです。 <br /><br />より広範なコンテキストは次のとおりです: <br />問題は、コードの大部分が非常に似ていることです。つまり、ほとんどのscopeXXX/fromXXXメソッドは同様のことを実行します。つまり、プロパティリポジトリです。メソッドにパラメータとして渡されます。たとえば、上記の例では、$scope($this->documents) が実行されますが、さらに、$this->documents が初期化されていない場合は、新しいインスタンスが作成されます。 <br /><br />コードは次のようになります。</p><p><br /></p> <pre class="brush:php;toolbar:false;">パブリック関数 fromDocuments(callable $scope) { if (!isset($this->documents)) { $this->documents = 新しいDocuments(); } $scope($this->documents); } </pre> <p>if ステートメントを書いたり、新しいオブジェクトを作成したり、毎回メソッドを呼び出したりするのを避けたかったので、呼び出し可能なオブジェクト、プロパティ名、および型のリフレクションを受け入れるメソッドを使用して実行できると考えました。クラス名。 </p><p>コードは正常に実行されますが、残念ながら、このアプローチにより、これらのプロパティへのバインドが失われます。以前のバージョンでは $this->documents だったのでリンクが存在していましたが、現在はそうではありません。 </p><p>これを達成する方法があるかどうか知りたいです。何か案は? </p>


P粉364642019P粉364642019486日前517

全員に返信(1)返信します

  • P粉135799949

    P粉1357999492023-07-29 15:10:32

    リーリー

    このようにして、参照には、そこで使用する属性とクラスの両方が含まれます。これは通常、両方を表す文字列を使用するよりも優れています (また、具体的なプロパティと具体的なクラス名への参照も失われます)。

    ここで行っていることは、遅延初期化とも呼ばれます。問題は、新しいキーワードがクラスで使用されており、コードのテストが困難になっていることです。それでも、これは文字列を扱う場合よりも改善されています。

    PhpStorm の新しい @mixin にも興味があるかもしれません


    これにより、呼び出し可能オブジェクトの注入を省略できる可能性がありますが、このメソッドで正確に何を達成しているのかは完全には明確ではないため、これは単なる追加のヒントであり、ニーズに合わない可能性があります。 ######参照:############

    PHP RFC: Null 合体代入演算子


      PHP 7.4 の null 合体代入とは何ですか ??= 演算子
    • 「定義済みおよび未定義のインデックスの配列要素の値を安全に取得する」に対する回答
    • 返事
      0
  • キャンセル返事