0

$property が $object の任意の深さに存在しない場合は false を返し、それ以外の場合は $object 内で見つかった最初の $property に対応する値を返す getPropertyValue($object, $property) という再帰的に定義された関数があります。これは基本的に、PHP の組み込み関数 property_exists() の一般化されたバージョンです。

このメソッドをチェーン可能にしたいのですが、これを行うには、メソッド内のクラス インスタンス ($this) への参照を返すだけでよいことはわかっていますが、前述のように、 $object 内で最初に見つかった $property。

この値を返しながら、このメソッドを連鎖可能にするにはどうすればよいですか? $this とそのプロパティ/false の値の両方を含むオブジェクトを、それぞれ見つかった場合と見つからなかった場合に返す可能性があると考えています。これは実行可能なアプローチですか?このコンテキストで連鎖可能性を達成するための最良の方法は何ですか?

どうもありがとう。

4

2 に答える 2

0

この種の API は、データを返したい場合には実際には機能しません。

より少ない定型コードで多数のメソッドを実行できる複雑なオブジェクトを構築するのに便利です。メソッドは説明的な名前が付けられる傾向があり、何が行われているのかがよくわかります。

例として、チェーンされたメソッドを介して SQL ステートメントを構築する「クエリ ビルダー」パターンがあります。

$sql = $qb->select()->from('table')->where()->field('foo')->equals('bar');

ただし、だまされてはいけません。これは、セッターを使用しなくても済むようにするためです。

$qb->setSelect();
$qb->setFrom('table');
$qb->setField('foo');  
$qb->setEquals('bar');

クエリビルダーを作成していないことは明らかであり、同じ API のさまざまな実装がありますが、重要なのは、オブジェクトを返すのではなく、すべてオブジェクトにデータを追加することです。

于 2013-11-03T11:33:47.047 に答える