本人初学smarty,根据旧的smarty manual 编写smarty 扩展类出现如下错误提示:
( ! ) Fatal error: Uncaught exception 'SmartyException' with message 'PHP5 requires you to call __construct() instead of Smarty()' in F:\wamp\www\libs\smarty-v3.13\libs\sysplugins\smarty_internal_templatebase.php on line 803 | ||||
---|---|---|---|---|
( ! ) SmartyException: PHP5 requires you to call __construct() instead of Smarty() in F:\wamp\www\libs\smarty-v3.13\libs\sysplugins\smarty_internal_templatebase.php on line 803 | ||||
Call Stack |
原因在于新版php要求用统一的构造函数__construct进行类初始化,不能使用类名。
根据第二点提示就能了解到
还有一点就是在子类构造函数中调用父类构造函数必须使用parent::__construct()进行初始化。
如果初学者根据smarty手册进行学习,那么建议php和smarty版本必须下载对应手册的版本,以免纠结。
// load Smarty library
require('Smarty.class.php');
// The setup.php file is a good place to load
// required application library files, and you
// can do that right here. An example:
// require('guestbook/guestbook.lib.php');是一个很好的加载应用程序的类库文件(就是扩展类)
//例如你可以在index文件里包含它
class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook() {
// Class Constructor. These automatically get set with each new instance.
//类构造函数.创建实例的时候自动配置
$this->Smarty();
$this->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$this->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$this->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$this->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
$this->caching = true;
$this->assign('app_name','Guest Book');
}
}
则更改后如下
class Smarty_GuestBook extends Smarty {
function _construct() {
// Class Constructor. These automatically get set with each new instance.
//类构造函数.创建实例的时候自动配置
parent::__construct();
$this->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$this->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$this->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$this->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
$this->caching = true;
$this->assign('app_name','Guest Book');
}
}