Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как вызвать метод признаков из метода класса, который использует этот признак, если имена обоих методов одинаковы?

Автор вопроса: Md. Kausar AlamОтветов: 1
trait World {

    public function sayHello()
    {
        echo "World!";
    }
}

abstract class AbstractHello{}

class Hello extends AbstractHello {
    use World;

    public function sayHello()
    {
        echo "Hello";
        $this->sayHello(); // calling its not working
    }
}

class Hello2 extends AbstractHello {
    use World;
}

Теперь, если я позвоню следующим образом, он должен показать "HelloWorld!"

$h = new Hello();
$h->sayHello();

И если вызов следующим образом, он должен показать "Мир!"

$h = new Hello2();
$h->sayHello();

Я не хочу менять имя метода свойств, используя оператор as, потому что метод sayHello() был вызван из других мест для дочернего класса, такого как Hello2.

Код выше не работает. Любая помощь?

phptraits

Ответы

Ответ 1 · рейтинг 4 · marian0

В вашем классе Hello вы должны создать псевдоним для метода sayHello() типажа.

class Hello extends AbstractHello {
    use World
    {
        sayHello as sayHelloWorld;
    }

    public function sayHello()
    {
        echo "Hello";
        $this->sayHelloWorld(); // calling it's working now
    }
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы