類的類型提示 - 將類名放在需要約束的方法參數之前
語法格式:
public function write(ShopProduct $shopProduct){}
數組提示:
public function setArray(array $storearray){}
class ShopProduct{ public $title = 'default product'; // 屬性也稱為成員變量,用來存放對象之間互不相同的數據 public $producerMainName = 'main name'; public $producerFirstName = 'first name'; public $price = 0; // 創建對象時,構造方法會被自動調用,構造方法可以確保必要的屬性設置,並完成任何需要准備的工作 public function __construct($title,$producerMainName,$producerFirstName,$price){ $this->title = $title; // 使用偽變量$this給每個變量賦值 $this->producerMainName = $producerMainName; $this->producerFirstName = $producerFirstName; $this->price = $price; } public function getProducer(){ // 方法讓對象執行任務 return $this->producerMainName . $this->producerFirstName; } } class ShopProductWriter{ public function write(ShopProduct $shopProduct){ // 類的類型提示,只需將類名放在需要約束的方法參數之前 $str = $shopProduct->title . ':' . $shopProduct->getProducer() . "($shopProduct->price) . </br>"; print $str; } public function setArray(array $storearray){ // 數組提示 var_dump($storearray); } public function setWriter(ObjectWriter $objectWriter=null){ var_dump($objectWriter); } } class Wrong{}; $store = array('name'=>'taobao'); $objectWriter = NULL; $product1 = new ShopProduct('My Antonia','Willa','Cather',5.99); // 更易於實例化,也更安全,實例化和設置只需要一條語句就可以完成,任何使用ShopProduct對象的代碼都可以相信所有的屬性皆被初始化了 $writer = new ShopProductWriter(); $writer->write($product1); // 有了參數提示,規定此處只能傳入new ShopProduct對象 $writer->write(new Wrong()); // 傳入其它的對象會出現:Catchable fatal error: Argument 1 passed to ShopProductWriter::write() must be an instance of ShopProduct, instance of Wrong given..從而防止隱藏bug的產生。 $writer->setArray($store); // 有了參數提示,規定此處只能傳入一個數組 $writer->setWriter($objectWriter); // 有了參數提示,規定此處只能傳入NULL