2010-06-16 120 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'); 
}