Например, у нас есть следующий абстрактный класс
<?php
class AbstractClass {
public function setParam(): AbstractClass {}
}
class ConcreteClass extends AbstractClass {
public function test():void {}
}
Когда вы попробуете использовать это так
<?php
(new ConcreteClass())->setParam()->test();
Затем после setParam
мы увидим только setParam
метод, потому что setParam
возвращается AbstractClass
, Я пытался отметить setParam
внутри AbsractClass
с PHP-документом @return self
, но это не работает.
Есть ли решения этой проблемы?
Для решения этой проблемы вы можете использовать @return static
Атрибут PHP-doc
<?php
class A {
/** @return static */
public function methodA(): A;
}
class B {
/** @return static */
public function methodB(): B;
}
(new B())->methodB()->methodA()->methodB();
Все в этом примере будет выделено правильно.
Других решений пока нет …