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