我正在尝试覆盖smarty对象的assign方法,然后调用父对象。
class View extends Smarty
{
public function __construct()
{
parent::__construct();
}
public function assign($name, $value)
{
// some code that manipulate the values of $name and $value
// .......
parent::assign($name, $value, false);
}
}
$tpl = new View();
$tpl->assign('name', 'index.tpl');
此时我得到了
Strict standards: Declaration of View::assign() should be compatible with Smarty_Internal_Data::assign($tpl_var, $value = NULL, $nocache = false) in /Users/me/Projects/smarty/View.php on line 6
这里有什么问题?
答案 0 :(得分:0)
因为您使用了相同的方法名称,所以您将覆盖父方法。在这种情况下,您需要自己遵循Smarty的assign()
参数(就像使用界面一样)。
试试这个:
public function assign($name, $value = null, $nocache = false)
{
// some code that manipulate the values of $name and $value
// .......
parent::assign($name, $value, $nocache);
}
初始化子类的对象时,不需要调用父的构造函数。所以你可以摆脱这些代码,因为它完全没用:
public function __construct()
{
parent::__construct();
}
答案 1 :(得分:0)
Smartie基类已经有一个带有默认值的多参数“assign”函数。你不需要你的两个参数赋值函数,因为它被归类为“阴影”而没有正确覆盖。如果需要覆盖,则应使签名相同。
public function assign($tpl_var, $value = NULL, $nocache = false)
否则,你调用(多态/继承样式),
myobj.assign("bob", "myvalue")
由于您使用默认参数隐藏了相同的函数,因此它不知道要调用哪一个。
鉴于你的函数是一个带有默认值的直通,除非你修剪了一些业务逻辑,否则该函数几乎是多余的。