Подтвердить что ты не робот

Функция унаследованного вызова PHP Trait

У меня есть черта

trait Foo{

    protected static function foo(){
        echo 'Hello';
    }
}

и класс

class Bar{
    use Foo;

    private static function foo(){
        Foo::foo();

        echo ' World!';
    }
}

Я не могу использовать Foo:foo(). Что я могу сделать для достижения желаемого эффекта?

ИЗМЕНИТЬ

Используя

use Foo {foo as parentFoo}

private static function foo(){

    self::parentFoo();

    echo ' World!';

}

сделал трюк.

4b9b3361

Ответ 1

Вы можете сделать что-то вроде этого:

class Bar{

    use Foo {
        Foo::foo as foofoo;
    }

    private static function foo(){

        self::foofoo();

        echo ' World!';

    }

}

Ответ 2

Можно ли переименовать свой метод traf foo в fooo?

Если да, сделайте и замените Foo:: foo() на Foo: fooo() в своем классе методов тела перед следующим синтаксисом статического вызова (добавив статическое ключевое слово к определению своей функции)

<?php

trait Foo 
{
    protected static function Fooo()
    {
        echo 'Hello';
    }
}

class Bar 
{
    use Foo;

    private static function foo() 
    {
        self::fooo();

        echo ' World!';
    }

    public static function expose() 
    {
        echo self::foo();
    }
}

echo Bar::expose();

EDIT:

Очевидно, что ответ на мой вопрос: "Нет, вам не разрешено переименовывать метод признаков", и в этом случае вы указали решение, связанное с разрешением нативного разрешения, встроенным в PHP: http://php.net/manual/en/language.oop5.traits.php#language.oop5.traits.conflict