Предполагая следующее:
class A
{
public static function new()
{
return new self();
}
}
class B extends A
{
}
class C
{
public function main()
{
$b = B::new(); // it actually returns a new A -- how to get it to return a new B since B inherited that method?
}
}
При вызове B::new()
он на самом деле возвращает новый A -
Как заставить его вернуть новый B, так как B унаследовал этот метод?
Редактировать: Было обвинение в дублировании вопроса, и мой ответ на него: на самом деле это не дубликат, так как ранее упоминавшийся вопрос касался изменения в языковой структуре, а не этого вопроса о том, как работает наследование. Они очень близки и имеют одинаковый ответ, но это не тот же вопрос. Это как сказать, что 2 * 2 является дубликатом 2 + 2; они имеют одинаковые цифры и в итоге получают одинаковый результат, но задают разные вопросы.