我有
abstract class A{
public static function getSingle($where = []) {
$classname = get_called_class();
$record = static::turnTheWhereIntoArecordFromDB($where);
$model = new $classname($record);
return $model;
}
}
class B extends A{
}
$x = B::getSingle();
$x
没有类型提示... 我喜欢类型提示,所以我想要 B
的类型提示,而不是 A
如何直接为$x
启用类型提示?
我以为是这样的
public function getSingle($where = []) : ?get_called_class()
这显然行不通
有什么可以做的吗?
最佳答案
对于您提供的示例,为什么需要工厂方法?您正在从构造函数创建一个新实例,为什么不直接 $x = new B($record)
!
以上更新
abstract class A
{
/**
* @param array $where
* @return static
*/
public static function getSingle($where = [])
{
$classname = get_called_class();
$model = new $classname($record);
return $model;
}
}
@return static
将类型提示其子类。另外我把你的函数改成了静态函数,这是典型的工厂模式。
关于php - 如何在 php 7.1 中指示返回类型是当前子类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46368880/