我有一个抽象类Foo和一个抽象构建器FooBuilder
abstract class Foo {
}
abstract class FooBuilder {
protected Foo $model;
/**
* 返回类实例
*
* @return Model //正确的返回类型是什么??
*/
public function get()
{
return $this->model;
}
}
我想在我的子构建器中使用get()方法,但IDE检测到返回类型是子类,而不是抽象的Foo。
class Bar extends Foo {
}
abstract class BarBuilder {
public function __construct()
{
$this->model = new Bar();
}
}
$barBuilder = BarBuilder();
$bar = $barBuilder->get(); //类型是“Bar”,但IDE认为是“Foo”
有没有办法在PHPDoc中返回属性的静态类型而不是类?类似于@return static($this->model)?
一个例子是Laravel的Eloquent在SomeModel::find()中的用法。IDE知道类型可以是SomeModel。但@return只有Model。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您应该在示例中使用Foo作为返回类型;但是为了好玩,您可以使用静态返回类型来确定子实例,如下所示
class Foo { /** * @return string */ public function Iam(): string { return "hello"; } } class Helper { /** * Return the class instance * * @return static */ public static function get(): static { return new self(); } } class FooBuilder extends helper { protected Foo $model; public function mememe() { echo "I am a method"; } } class FooBuilder2 extends helper { protected Foo $model; public function xray() { echo "I am a method"; } } $test = FooBuilder::get(); $test->mememe(); $test2 = FooBuilder2::get(); $test2->xray();