У нас есть код устаревшего интерфейса, который я хочу расширить, не нарушая другие классы, которые его реализуют. Мне нужно добавить дополнительный параметр к одному из методов интерфейса, поэтому новые классы, которые будут реализовывать интерфейс, будут использоваться, а старый будет игнорировать его. AFAIK, нет способа изменить интерфейс без изменения сигнатуры метода реализации.
Текущая реализация:
interface inter
{
public function hey($rr);
}
class Cl implements inter
{
function hey($rr) {
echo "hey";
}
}
Мне хотелось бы что-то вроде этого:
interface inter
{
public function hey($rr, $ee = true);
}
class Cl implements inter
{
function hey($rr) {
echo "hey";
}
}
Я знаю, что это приведет к фатальной ошибке - я хочу понять, есть ли подобный способ или, может быть, передовая практика для этого сценария.
Спасибо, Алон
Я не думаю, что для этого существует какое-либо решение. Я бы предложил добавить другой метод с другим именем, например
interface inter
{
public function hey($rr);
public function yey($rr, $ee = true);
}
Или еще лучше расширяет интерфейс с другим интерфейсом, который будет работать для новых классов.
interface other_inter extends inter
{
public function yey($rr, $ee = true);
}