У меня есть 3 класса:
class Foo { static function test() { return new static(); } } class Bar extends Foo {} class Baz extends Foo {}
Теперь, если вы звоните:
$var = Bar::test();
Я хочу, чтобы PhpStorm идентифицировал $var
как called_class
, здесь: Bar
.
Но, если я делаю $var = Baz::test();
$var
– пример Baz
.
Как я могу заставить динамический call_class указать PhpStorm, какой тип возвращается?
Я там синтаксис вроде
/** @return "called_class" */
помочь PhpStorm и указать тип?
Сначала у вас есть ошибка в вашей статической функции. Вы не можете использовать
return $this;
поскольку статический вызов не будет создавать какой-либо экземпляр. Поэтому вам нужно создать новый экземпляр.
class Foo { public static function test() { return new static(); } }
Статическое ключевое слово будет создавать экземпляр нового экземпляра самого класса.
class Bar extends Foo { public function fooBar(){} } class Baz extends Foo { public function fooBaz(){} }
Я просто добавил функции foo, чтобы показать вам, что phpStorm теперь правильно найдет источник.
$var = Bar::test(); $var->fooBar();
$ var теперь является экземпляром Bar
$var2 = Baz::test(); $var2->fooBaz();
$ var2 теперь является экземпляром Baz