ちょっと面白い簡単なデモを次に示します。
<?php
class ChainMe {
public function hello() {
echo 'Hello ';
return $this;
}
public function good($is = false) {
if ($is === true) {
echo 'beautiful ';
}
return $this;
}
public function day() {
echo "world!\n\n";
return $this;
}
}
$happy = new ChainMe();
$happy
->hello()
->good(true)
->day();
$meh = new ChainMe();
$meh->hello()->good()->day();
?>
http://codepad.org/zlQEMPqK
jQuery に精通していて、次のようなものを見たことがある場合:
jQuery('#my .awesome[selector]')
.fadeToggle('fast')
.addClass('rocks')
.fadeToggle();
次に、連鎖を経験しました。たとえばjQuery
、ソース内の変数の定義を見てください。
// Define a local copy of jQuery
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},
またjQuery.extend
、 、jQuery.fn
/jQuery.fn.init
、$
およびwindow._$
. そのメンバ メソッドの多くが返さthis
れます (または、別のメソッドが返されて が返されますthis
)。順番があります。jQuery が登場したとき、多くの「Javascript」開発者がこのパターンを見たのはこれが初めてでした。慣れるまでに時間がかかりました。:)
jQuery では、多くの条件下で、メソッド チェーンのパフォーマンスが大幅に向上するはずです (たとえば、タイミングが重要なアニメーション キューなど)。それが PHP の場合かどうかはわかりませんが、それは完全に可能です。私はサーバーよりもブラウザを使っているので、PHP ではあまり見たことがありません。しかし要点は、それは把握すべき力の概念だということです。