#### 1. 構造方法簡介 --- + **構造方法 `__construct()` 是一種類結構特有的特殊方法,該方法由系統規定好** + **實例化一個類時:先調用該方法,再返回類的對象** + **構造方法也是普通方法,不同之處就是在實例化類時會自動調用** + **構造方法用來初始化對象資源的,例如`屬性`或`其他資源初始化`**  #### 2. 私有化構造方法 --- **a. 在類的外部實例化類,相當于在類的外部調用了構造方法** ```php new User; class User { public function __construct() { echo __METHOD__; } } ``` **b. 單例模式設計一個類時,需要禁止類在外部被實例化,因為這樣會生成無限個對象** + 構造方法私有化之后,只能在類的內部實例化當前類 + 為了在類的外部能夠獲取到類的實例,應該提供一個類的入口(靜態方法),用于獲取類的實例 ```php // 返回類的實例 User::getInstance(); class User { /** * 私有化構造方法 * 禁止類在外部被實例化 */ private function __construct() { echo __METHOD__; } /** * 類的入口 * 用于獲取類的實例 */ public static function getInstance() { return new self; } } ``` #### 3. 構造方法參數 --- **(1)未定義構造方法或構造方法沒有參數時** 以下獲取類的實例的兩種方式都可以 ```php new User;//不需要給構造方法傳參,可不寫括號 new User();//寫了也不錯 class User { public function __construct() { echo __METHOD__; } } ``` **(2)構造方法有參數且參數沒有默認值時,實例化類必須傳入參數** ```php new User('張三', 20);//實例化類時必須傳入參數,此處參數叫實參 class User { // 此處參數叫形參 public function __construct($name, $age) { echo __METHOD__; } } ```