Как переопределить два одинаковых метода черт?

Пожалуйста, прочтите мой код ниже

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 раз?

Спасибо

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

kallosz 01.08.2018 11:31

Вам лучше использовать иерархию

Sakezzz 01.08.2018 11:33

Какую проблему вы пытаетесь исправить с помощью этого кода? Похоже, что может быть вам нужен какой-то шаблон декоратора, но трудно сказать, чего он пытается достичь.

iainn 01.08.2018 11:44

Ваш примерный код в значительной степени ерунда. Нет абсолютно никаких причин, по которым они должны иметь разные черты (или даже разные методы). Покажите нам пример настоящий, и мы сможем указать, где в дизайне есть недостатки.

Magnus Eriksson 01.08.2018 11:45

Хорошо, я приведу реальный пример, в настоящее время я использую Laravel с библиотеками, и оба использовали метод getAttribute, это вызвало конфликт, и мне нужно решить его, используя приведенный выше код ... Любой другой выбор?

Raiika 01.08.2018 19:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
42
0

Другие вопросы по теме