Пожалуйста, прочтите мой код ниже
class A
{
public function echo($key)
{
if ($key === 1) return 'one';
return 'default';
}
}
trait X
{
public function echo ($key)
{
if ($key === 2) return 'two';
return parent::echo($key);
}
}
trait Y
{
public function echo ($key)
{
if ($key === 3) return 'three';
return parent::echo($key);
}
}
class B extends A
{
use X, Y {
X::echo as echoX;
Y::echo as echoY;
}
public function echo ($key)
{
if ($this->echoX($key) !== parent::echo($key)) {
return $this->echoX($key);
}
return $this->echoY($key);
}
}
$object = new B();
echo $object->echo(2);
Посмотрите на метод echo в классе B
Есть ли что-нибудь, что могло бы упростить такое поведение?
Примечание: В настоящее время есть только 2 трейта, у которых есть один и тот же метод: Если есть 10 черт, которые используют один и тот же метод, должен ли я использовать if else 9 раз?
Спасибо
Вам лучше использовать иерархию
Какую проблему вы пытаетесь исправить с помощью этого кода? Похоже, что может быть вам нужен какой-то шаблон декоратора, но трудно сказать, чего он пытается достичь.
Ваш примерный код в значительной степени ерунда. Нет абсолютно никаких причин, по которым они должны иметь разные черты (или даже разные методы). Покажите нам пример настоящий, и мы сможем указать, где в дизайне есть недостатки.
Хорошо, я приведу реальный пример, в настоящее время я использую Laravel с библиотеками, и оба использовали метод getAttribute, это вызвало конфликт, и мне нужно решить его, используя приведенный выше код ... Любой другой выбор?






если у вас есть 10 черт, использующих один и тот же метод, это означает, что вы неправильно спроектировали код.