Может ли php вызывать псевдоним stati c? - PullRequest
0 голосов
/ 23 февраля 2020

В php возможно ли, чтобы метод в родительском классе использовал псевдоним в дочернем классе из экземпляра дочернего класса?

Родительский класс:

class ParentClass
{
    public function getNewFoo()
    {
        return new Foo();
    }
}

Дочерний класс:

use My\Custom\Path\To\Foo;

class ChildClass extends ParentClass
{

}

Код:

$child = new ChildClass();
return $child->getNewFoo();

Я бы хотел, чтобы этот код возвращал новый экземпляр My\Custom\Path\To\Foo(), а не новый экземпляр Foo().

Я понимаю, что могу сохранить желаемый путь к Foo в свойстве класса или просто создать экземпляр нужного Foo в дочернем классе. Однако оба они кажутся излишними, учитывая, что путь уже сохранен в операторе use в дочернем классе.

1 Ответ

1 голос
/ 23 февраля 2020

Вы спрашиваете много PHP здесь. Предполагается, что ваше заявление use повлияет на что-то в совершенно другом классе, в совершенно другом файле, просто потому, что?

Если PHP сделает это по умолчанию, это вызовет много очень странные проблемы для людей. Переопределите метод или, как вы указали, сохраните это свойство в самом классе.

Я думаю, что многие разработчики ожидают или, по крайней мере, предпочитают, чтобы PHP вел себя так, как он.

Похоже, вам нужна фабричная функция, которая может быть переопределена в подклассе, чтобы вести себя иначе, или, другими словами, getNewFoo() должна быть переопределена в подклассе для использования альтернативной версии.

...