Smartyクラスを継承する際の書き方について

2013-03-04追記

以下の記述で私が参照していたのは、Smartyバージョン2のドキュメントでした。Smartyバージョン3のドキュメントには、parent::__construct()とする書き方が載っています。


Smartyのドキュメントには、Smartyクラスを継承したクラスの書き方の例として、以下の様なクラスが載っています。

class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook()
{
// クラスのコンストラクタ。
// これらは新しいインスタンスで自動的にセットされます。
$this->Smarty();
$this->template_dir = '/web/www.example.com/guestbook/templates/';
$this->compile_dir  = '/web/www.example.com/guestbook/templates_c/';
$this->config_dir   = '/web/www.example.com/guestbook/configs/';
$this->cache_dir    = '/web/www.example.com/guestbook/cache/';
$this->caching = true;
$this->assign('app_name', 'Guest Book');
}
}

引用元:http://www.smarty.net/docsv2/ja/installing.smarty.extended.tpl

しかし、この書き方だと、PHP5.4.10/Smarty3.1.13の環境では、コンストラクターの呼び出し時に例外が発生して止まりました。以下のように書けば動きます(太字が変更箇所。また、変更箇所に関係ない部分は省略)。

class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook()
{
parent::__construct();// $this->Smarty();ではダメ
}
}

あと、Smarty_GuestBook()メソッドはコンストラクターとして働いていますが、PHP5ではクラス名と同名のメソッド名を付けるべきではないので、__construct()にすべきでしょうね。

コメントをどうぞ

コメントを残す