有没有办法在php中将显式类型设置为对象字段?像这样的东西
class House{
private Roof $roof
}
答案 0 :(得分:10)
不,没有。 PHP变量可以始终为任何类型。但是你可以在setter中强制执行一个类型:
public function setRoof(Roof $roof) {
$this->roof = $roof;
}
答案 1 :(得分:9)
您无法使用PHP代码声明对象字段的类型。
但您可以在docblock评论中输入提示:
class House{
/**
* @var Roof
*/
private $roof
}
这仍然不会使代码强制执行类型,但某些IDE工具会理解docblocks,并且如果您使用此变量而不符合类型提示,则可能会发出警告。
答案 2 :(得分:3)
您正在寻找PHP的类型提示。它适用于函数/方法调用。这是手册:
答案 3 :(得分:0)
为什么不将$ roof分配给新的Roof()?
答案 4 :(得分:0)
在使用会员
之前,您还可以使用以下内容if (!$this->roof instanceof Roof) {
throw new Exception('$this->roof is not an instance of Roof');
}