配列の扱いと$thisを返すメソッド
<?php class A { private $val = array(); public function add($val) { $this->val = array_merge($this->val, (array)$val); return $this; } } $a = new A; $a->add('aaa') ->add('bbb') ->add(array('ccc', 'ddd')) ->add('eee');http://cgi39.plala.or.jp/klove/w/k.cgi?page=Diary%2F2007%2D6%2D6
これいいな。やってみようかな。
Smalltalkの慣例というのは、「特に返すものがない場合にはthisを返す」ということ
http://java-house.jp/ml/archive/j-h-b/031589.html
です。setterでfoo.setA(1).setB(2)の記述に直接対応するのは厳密にはないです。
Foo f = ...
f.method1();
f.method2();
f.method3();と書かれていれば、method1, method2, method3はどれもFoo型で宣言された
メソッドだとすぐにわかりますが、Foo f = ...
f.method1().method2().method3();と書かれていると、method12の戻り値の静的型を調べないと、method2がどの
型のメソッドなのか判別できません。静的な型付け言語の特長を一つ失うことになると思います。
私の感覚では、
http://java-house.jp/ml/archive/j-h-b/031603.html
buf.append("1").append("2").append("3");
のように同じメソッドが連続する場合だけは使ってもよい ― という感じで
なるほど。
一番上の例のように構造体的なクラスに値を設定していくときは使ってもいいが、Zend_Controller_Actionのコンストラクタはちょっとやりすぎ、といったところかな。
Stringクラスの操作結果がStringクラスを返すのは感覚的に普通だな。なんでだろ。
データ保持が目的のクラスかどうか、か。