「Smartyテンプレート内でオブジェクトが使える件」の書き方なんだけど(luckyColorをtypoしてた件とは別に)、
{$fortune->luckyColor()|escape}
この書き方だと、$fortuneをassignし忘れると fatal error になるのな。 ところが
{$fortune->luckyColor|escape}
だとエラーにはならない不思議。 そこでFortuneクラスをこんな風に。
class Fortune
{
public function __get($key)
{
try {
$method = 'get' . ucfirst($key);
if (method_exists($this, $method)) {
return $this->$method();
} else {
return $this->$key;
}
} catch (Exception $err) {
return null;
}
}
public function getLuckyColor()
{
// なんか複雑な処理
}
}
これだと多少のことならなんとかなりそう。
一番いいのは fatal error を catch できることなんだけど、
副作用的にいいことがあって、
配列だとPHPの文法だと $hoge['fuga']
みたくなるのが、
Smartyだと {$hoge.fuga}
ってなるわけだけど、
オブジェクトならどちらも $hoge->fuga
だからハッピーで、
さらにGetterを使えば、取得のときにただ値を参照するだけなのか、
処理をしているのかを隠蔽できていいかもしんない。
Original Article: http://blog.fuktommy.com/1223642982