2010-06-16 155 views
5

有没有什么办法在PHP中设置显式类型为对象字段?像这样的东西PHP类声明

class House{ 
     private Roof $roof 
} 

回答

10

不,没有。 PHP变量总是可以是任何类型的。但你可以在setter中强制执行一个类型:

public function setRoof(Roof $roof) { 
    $this->roof = $roof; 
} 
+2

请注意,您只能执行对象或数组,而不是“原始”类型,如浮点数或字符串之前使用以下。 – svens 2010-06-16 23:14:52

+0

如果你有一个需要原始类型的setter,比如'bool',你总是可以'assert('is_bool($ value)');'。 – meagar 2010-06-16 23:23:20

+2

@svens:FWIW,PHP开发在2010年5月20日添加了标量类型暗示。不过,我不确定何时会将它变成正式版本。 – 2010-06-16 23:29:20

0

为什么不把$ roof分配给一个新的Roof()?

+0

打扰一下吗? – dimo414 2010-06-16 23:55:15

9

不能使用PHP代码来声明一个对象字段的类型。

但你可以把类型提示docblock评论:

class House{ 
     /** 
     * @var Roof 
     */ 
     private $roof 
} 

这仍然没有使代码执行的类型,但一些IDE工具了解文档块,如果你使用这个变量可能会向您发出警告不符合类型提示。

0

你也可以使用成员

if (!$this->roof instanceof Roof) { 

    throw new Exception('$this->roof is not an instance of Roof'); 
}