Ответ 1
Вы можете сделать что-то вроде этого:
class Bar{
use Foo {
Foo::foo as foofoo;
}
private static function foo(){
self::foofoo();
echo ' World!';
}
}
У меня есть черта
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!';
}
сделал трюк.
Вы можете сделать что-то вроде этого:
class Bar{
use Foo {
Foo::foo as foofoo;
}
private static function foo(){
self::foofoo();
echo ' World!';
}
}
Можно ли переименовать свой метод 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