blog.fuktommy.com

Smartyテンプレート+オブジェクト(バッドノウハウ編)

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を使えば、取得のときにただ値を参照するだけなのか、 処理をしているのかを隠蔽できていいかもしんない。

Copyright© 1998-2014 Fuktommy. All Rights Reserved.
webmaster@fuktommy.com (Legal Notices)