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, или, что гораздо более вероятно, я не понимаю, что я делаю …
Я прочитал о поздней статической привязке и следующие вопросы, которые частично обсуждают эту проблему, но я не мог понять, как ее исправить:
Спасибо за ваше время и помощь.
EDIT: как показано ниже, я пытаюсь реализовать в дочерних классах, например:
public function setName(string $name = null): user {...}
который, очевидно, не работает с self
но (ИМО должен) со static
, что запрещено.