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

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.

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


person Md. Kausar Alam    schedule 17.01.2017    source источник


Ответы (1)


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

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

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