4

私は OOP に比較的慣れていないので、Simple HTML DOM のドキュメントを参照して、そのメソッドがメソッドチェーンと値/オブジェクトを返す通常の動作の両方をどのように使用するのか疑問に思っていました。

たとえば、次のことができます。

 $html = new simple_html_dom();
 $html -> find('something'); // Returns object or array of objects

しかし、私もできる:

 $html -> find('something') -> find('something_else');

メソッドチェーンを正しく理解していれば、つまりそれ自体がfind()返されることを意味します。$this

また、メソッドチェーンを使用して return を使用することも私の理解です$this。その後、ゲッターメソッドを使用して、使用できる/必要な値を実際に返します。例えば:

$object -> add(1) -> add(2) -> getNumber();

ここで何が欠けていますか?前もって感謝します!

4

2 に答える 2

2

実際には、戻り値は配列であると想定されているため、find の戻り値に対して find を呼び出すことは意味がありません。

最終的には、次のように 2 番目のパラメーターを追加find(string, array&)できます。

$result1 = [];
$resilt2 = [];

$html -> find('something', $result1)
      -> fint('something else', $result2);

var_dump($result1, $result2);

と :

public function find($search, & $output) {
    $output = ...
    return $this;
}

あなたの好みによります。連鎖呼び出しは、同じオブジェクトに対して複数のメソッド (特に何も返さない) を呼び出して、変数名を毎回書き換えないようにして短いコードを作成する場合にのみ役立ちます。

編集:次のようなことをしたい場合:

" $html -> find('div#results') -> find('li a'); "

find によって返される値は DOM ではなく一連の結果であるのに対し、 $html は DOM を表すため、問題が発生します。find 関数は最終的に #result をルートとして小さな DOM を作成して返すことができます (これは、配列ではなく $html と同じクラスのオブジェクトになります)。その後、find を呼び出すと、代わりにその新しいルートで検索が実行されます。ドキュメントのルートですが、それは少し直感的ではありません。

于 2013-04-11T19:18:37.553 に答える