ログ日記

作業ログと日記とメモ

配列の扱いと$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を返す」ということ
です。setterでfoo.setA(1).setB(2)の記述に直接対応するのは厳密にはないです。

http://java-house.jp/ml/archive/j-h-b/031589.html

Foo f = ...
f.method1();
f.method2();
f.method3();

と書かれていれば、method1, method2, method3はどれもFoo型で宣言された
メソッドだとすぐにわかりますが、

Foo f = ...
f.method1().method2().method3();

と書かれていると、method12の戻り値の静的型を調べないと、method2がどの
型のメソッドなのか判別できません。

静的な型付け言語の特長を一つ失うことになると思います。

私の感覚では、
buf.append("1").append("2").append("3");
のように同じメソッドが連続する場合だけは使ってもよい ― という感じで

http://java-house.jp/ml/archive/j-h-b/031603.html

なるほど。


一番上の例のように構造体的なクラスに値を設定していくときは使ってもいいが、Zend_Controller_Actionのコンストラクタはちょっとやりすぎ、といったところかな。


Stringクラスの操作結果がStringクラスを返すのは感覚的に普通だな。なんでだろ。
データ保持が目的のクラスかどうか、か。