在類的實例化過程當中,能夠帶或不帶參數,那麼構造函數將如何處理這些參數呢?爲了使構造函數具備通用性,在定義構造函數時,通常不帶參數,而後在其內部對參數狀況進行處理。下面代碼顯示了一個完整的通用Person類。php
<?php /** * __construct() 不需設置參數,用php內置函數自動獲取 * * 在下面示例中,在構造函數裏使用了內置函數func_get_args()獲取到全部的參數, * func_num_args()獲取到參數的數量,而後使用判斷語句,執行其中一個用戶自定義方法, * 從而實現了構造函數帶不定參數個數的執行方法。 */ class Person{ // 定義Person類 private $name; // 定義name屬性 private $name2; public function __construct() { $array=func_get_args(); //獲取全部參數 $num=func_num_args(); //獲取參數的數量 if(method_exists($this, $f='func'.$num)){ //重要:檢查類中方法是否存在 call_user_func_array(array($this, $f), $array); // 執行一個方法與參數數組 } } public function func0() { $this->name = "沒有參數時輸出:唐僧"; } public function func1($value) { $this->name = $value; } public function func2($value1, $value2) { $this->name = $value1; $this->name2 = $value2; } function getName(){ return $this->name; } function getName2(){ $arr[0] = $this->name; $arr[1] = $this->name2; return $arr; } function setName($value){ $this->name = $value; } function __destruct() { print "<br>對象被銷燬"; } } $person = new Person(); echo $person->getName() . "<br>"; $person2 = new Person("孫悟空"); echo $person2->getName() . "<br>"; $person3 = new Person("豬八戒", "沙和尚"); print_r($person3->getName2()); ?>
執行後的效果圖:數組