目錄Table Of Contents
關於構造方法
任何給定的參數都會被傳遞到構造方法
class ShopProduct{ function __construct($title,$firstName,$mainName){ // 構造參數的特殊文法__construct }}$product1 = new ShopProduct('this is title','Peter','Peter Yuan'); //這裡就是傳入的參數,這裡傳入到類裡面,也會直接傳入到構造方法裡面,參數按順序排列
構造方法會在類被建立的時候自動執行
關於一些提醒
因為php是弱類型的語言,所以在變數聲明的時候不需要指定資料類型,這樣造就了方便,但是也帶來了一點安全問題,所以需要增加一些措施1.必要時增加一些類型判斷,例如is_bool()判斷是否布爾值,返回true false
function outputAddresses($resolve){ if(! is_boll ($resolve)){ XXXXXXXXXXXXXX } }
2.添加註釋例如這種:
/** * Determine if the given abstract type has been bound. * * @param string $abstract //宣布傳入的參數類型 * @return bool //宣布返回的值 */ public function bound($abstract) { $abstract = $this->normalize($abstract); return isset($this->bindings[$abstract]) || isset($this->instances[$abstract]) || $this->isAlias($abstract); }
在物件導向開發中,“專註特定任務,忽略外界上下文”是一個很重要的設計原則。(個人理解就是專項專做,特例特行,方法和類都只需要專註於自己的任務,這樣能夠很好避免出錯。)
你需要在檢測類型,轉換類型,依賴娘蒿清晰的文檔之間仔細權衡。(但無論決定用哪一種,都應該提供文檔)
我們不能依靠編譯器來防止類型相關的bug,必須考慮到當非法資料類型的參數傳遞給方法時,會產生怎樣的後果,我們不能完全相信用戶端程式員,應該始終考慮如何在方法中處理他們引入的無用的資訊。
關於類型提示(type hint)
- 類型提示可以檢測使用參數的類型
- 方法的定義更加清晰,更容易知道傳入的參數類型
沒有類型提示的時候 class ShopProduct{ } class ShopProductWriter{ public function write($shopProduct){ } } $product1 = new ShopProduct(); $writer = new ShopProductWriter(); $writer->write($product1); 有類型提示的時候 public function write( ShopProduct $shopProduct){ //指定了ShopProduct的對象才能傳入,這個就是類型提示 } ...... 在使用的時候 $writer->write($product1); //這樣直接傳入的時候代碼能夠自動檢測到,如果不是ShopProduct對象的話,會出現報錯的