构建流体界面时的类型转换问题
Type-casting problem while building fluid interface
例如我们有下面的摘要class
<?php
class AbstractClass {
public function setParam(): AbstractClass {}
}
class ConcreteClass extends AbstractClass {
public function test():void {}
}
当你尝试像这样使用它时
<?php
(new ConcreteClass())->setParam()->test();
那么在setParam
之后我们只会看到setParam
方法,因为setParam
returns AbstractClass
。我试图用 PHP-doc @return self
在 AbsractClass
中标记 setParam
,但它不起作用。
这个问题有什么解决办法吗?
要解决这个问题你可以使用@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();
此示例中的所有内容都将正确突出显示。
例如我们有下面的摘要class
<?php
class AbstractClass {
public function setParam(): AbstractClass {}
}
class ConcreteClass extends AbstractClass {
public function test():void {}
}
当你尝试像这样使用它时
<?php
(new ConcreteClass())->setParam()->test();
那么在setParam
之后我们只会看到setParam
方法,因为setParam
returns AbstractClass
。我试图用 PHP-doc @return self
在 AbsractClass
中标记 setParam
,但它不起作用。
这个问题有什么解决办法吗?
要解决这个问题你可以使用@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();
此示例中的所有内容都将正确突出显示。