当我们给标签赋上一个类对象时,这意味着,在模板里,smarty标签可以调用对象里面的所有public方法,打个比方,如果该类中有密码信息,且被该类封装,但又为方便修改提供给外部一public的接口modpass方法,这样的话就有可能被恶意或无意调用。
解决这种问题我们可以用对象注册 registerObject()
对象注册就是在给标签赋对象值得同时,限制该对象的允许调用方法,如
class user{
public $name = '李四';
public $age = '28';
public function say() {
return '你好,我叫' . $this->name;
}
public function modPass() {
return '修改密码成功';
}
}
$lisi = new user();
$smarty->registerObject('lisi',$lisi,array('say'));// 只允许调用say方法
值得注意的是:模板中使用注册得到的对象时,lisi前不加$,调用say方法后不加(),如:<h1>姓名:{lisi->say}</h1>