以下就用一段程式碼範例來示範PHP高階物件建構中的使用多個建構函式進行物件建構的原理。
複製程式碼 程式碼如下:
class classUtil {//這是一個參數處理的類別
public static function typeof($var){ _obof ($var) get_class($var);//如果是對象,取得類別名稱
if (is_array($var)) return "array";//如果是數組,則返回"array"
if (is_numeric($var)) return " numeric";//如果是數字,回傳"numeric"
return "string";//字串回傳"string"
}
public static function typelist($args){
return array_map(array("self"," typeof"),$args);//陣列迴圈透過呼叫self::typeof處理$args中的每個元素
}
public static function callMethodForArgs($object,$args,$name="construct"){
$ method=$name."_".implode("_",self::typelist($args));//implode 是把陣列元素用"_"連接成一個字串
if (!is_callable(array($ object,$method))){//is_callable()函數測試$object::$method是不是可呼叫的結構
echo sprintf("Class %s has no methd '$name' that takes".
"arguments ( %s)",get_class($object),implode(",",self::typelist($args)));
call_user_func_array(array($object,$method),$args);//call_user_func_array函數呼叫$ object::$method($args)
}
}
}
class dateAndTime {
private $timetamp;
public function __construct(){//自己的建構子=f/arg$s(Mid$args(M. classUtil::callMethodForArgs($this,$args);//呼叫參數處理類別的方法
}
public function construct_(){//參數為空的時候
$this->timetamp=time();
}
public function construct_dateAndTime($datetime){//為類別本身的時候
$this->timetamp=$datetime->getTimetamp();
}
public function construct_number($timestamp){//為數字的時候
$this($timestamp){//為數字的時候
$this ->timetamp=$timestamp;
}
public function construct_string($string){//為時間型字串時候
$this->timetamp=strtotime($string);
}
public function getgettamp(){///取得時間戳記的方法
return $this->timetamp;
}
}
?>
以上方法,就說明了多個構造函數的使用方法,其實,很簡單,主要是對參數進行了處理,不管是參數是字符,還是數字,還是類,都先進了不同的處理,這樣就加大了代碼的靈活性。