Тип возврата «self» в абстрактном классе PHP

PHP 7.1

В настоящее время я пытаюсь создать абстрактный класс, чтобы обеспечить и определить и частично реализовать функциональность своих «дочерних классов».

Здесь я использую следующую конструкцию:

abstract class Parent { public static function fromDB(string $name = '') { $instance = new static(); if (!empty($name)) { $instance->setName($name)->read(); } return $instance; } public abstract function read(); public abstract function setName(string $name): self; } 

Здесь PHP, похоже, понимает, что setName($name) возвращает объект с типом Parent , но PhpStorm указывает, что read() не может быть вызван в результате, что было бы ожидаемым результатом.

Сообщение об ошибке: ссылочный метод не найден в классе темы.

Я не уверен, что это ошибка в PHP или PhpStorm, или, что гораздо более вероятно, я не понимаю, что я делаю …

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

  • Вопрос 1
  • вопрос 2
  • Поздний статический документ привязки

Спасибо за ваше время и помощь.


EDIT: как показано ниже, я пытаюсь реализовать в дочерних классах, например:

 public function setName(string $name = null): user {...} 

который, очевидно, не работает с self но (ИМО должен) со static , что запрещено.

Solutions Collecting From Web of "Тип возврата «self» в абстрактном классе PHP"