例えば、こういうクラスがあったとする
/** ** ゲームキャラのクラス **/ class Character { /** * 歩行の状態にする。 * @param $place 歩行する場所。 */ private function _walk($place){ $this->_state = Const::STATE_WALK; $this->_place = $place; } /** * 山を歩いている状態にする。 */ public function walkInMountain(){ $this->_walk(Const::PLACE_MOUNTAIN); } }
「walkIn~~ってメソッド名長くね?」
「良く使うメソッドだから、あんまり書くと、ソースが読みづらくなるんだよね。」
という突っ込みが入ったとする。
対応として、
walkInMountain → walkInMt
とかやってもいいけど、逆に分かりづらくなる。mtってなんやねんと。
/** ** 歩行クラス **/ class Walk { private $_chara = null; public function __construct($chara){ $this->_chara = $chara; } /** * 歩行の状態にする。 * @param $place 歩行する場所。 */ private function _walk($place){ $this->_chara->state = Const::STATE_WALK; $this->_chara->place = $place; } /** * 山を歩いている状態にする。 */ public function mountain(){ $this->_walk(Const::PLACE_MOUNTAIN); } }
とすれば、呼び出し元からは
$chara = new Character(); $chara->walk->mountain();
みたいに、
主語->動作->述語
という構文で記述できるので、すっきりすると思う。
before) $chara->walkInMountain(); after) $chara->walk->mountain();
でも、やりたいことはそういうことだ!
つたわれ!俺の思い!
int write() { int numberWritable = 0; : }
こんなのは、
int write() { int number = 0; : }
にしてしまえ!
みたいな。