Переопределяющий метод назначения

Я пытаюсь переопределить метод assign объекта smarty, а затем вызываю родительский метод.

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

В чем здесь проблема?

1

Решение

Поскольку вы использовали одно и то же имя метода, вы переопределяете родительский метод. В этом случае вы должны следовать Smarty’s 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();
}
0

Другие решения

Базовый класс Smartie уже имеет функцию «назначить» с несколькими параметрами со значениями по умолчанию. Вам не нужна функция назначения с двумя параметрами, поскольку она классифицируется как «затенение» без надлежащего переопределения. Если вам нужно переопределить, вы должны сделать подписи одинаковыми.

public function assign($tpl_var, $value = NULL, $nocache = false)

в противном случае вы звоните (полиморфный / наследование стиля),

myobj.assign("bob", "myvalue")

он не знает, какую из них вызывать, поскольку вы замаскировали ту же функцию с параметром по умолчанию.

Учитывая, что ваша функция является прямым проходом со значением по умолчанию, если вы не обрезали какую-то бизнес-логику, функция в значительной степени избыточна.

0

По вопросам рекламы [email protected]