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