构建流体界面时的类型铸造问题



例如,我们有以下抽象类

<?php
class AbstractClass {
public function setParam(): AbstractClass {}
}
class ConcreteClass extends AbstractClass {
public function test():void {}
}

当你尝试像这样使用时

<?php
(new ConcreteClass())->setParam()->test();

setParam之后,我们将只看到setParam方法,因为setParam返回AbstractClass。我试图用PHP文档@return selfAbsractClass中标记setParam,但它不起作用。

这个问题有什么解决办法吗?

要解决此问题,可以使用@return staticPHP文档属性

<?php
class A {
/** @return static */
public function methodA(): A;
}
class B {
/** @return static */
public function methodB(): B;
}
(new B())->methodB()->methodA()->methodB();

此示例中的所有内容都将正确突出显示。

最新更新