評等結果
點擊便能為這篇文章進行評等!
[評等總次數: 0,平均評等: 0]
上一篇介紹了 魔術方法 __call ,除了當防呆之外還可以拿來實現 overloading 多載,先簡單介紹一下多載是什麼,就是同一個方法 會因為所載入的參數的不同而去做不一樣的動作。
//__call 呼叫到不存在的方法後 會觸發到此方法
class People {
private $height;//身高
private $weight;//體重
private $sex;//姓別 要改成 保護 子類別才可以變更它的值
function __call($fun, $args) {
$count=count($args);
switch($fun) {
case 'set':
switch($count){
case 3:
if (is_int($args[0]) && is_int($args[1]) && is_string($args[2])) { // 數字,數字,字串 參數的格式
$this->height=$args[0];
$this->weight=$args[1];
$this->sex =$args[2];
}break;
case 2:
if (is_int($args[0]) && is_int($args[1])) { // 數字,數字 參數的格式
$this->height=$args[0];
$this->weight=$args[1];
}break;
case 1:
if (is_int($args[0]) ) { // 數字 參數的格式
$this->height=$args[0];
}break;
default:
$this->height=0;
$this->weight=0;
$this->sex ='male';
break;
}
case 'get'://取得三個參數
return '<br>jeff 的身高是:'.$this->height.
'<br>jeff 的體重是:'.$this->weight.
'<br>jeff 的姓別是:'.$this->sex.'<br>';
default:
echo '找不到'.$fun.'這個方法' ;
}
}
}
$jeff = new People();
echo '<br>帶三個參數<br>';
$jeff->set(170,65,'male');
echo $jeff->get();
echo '<br>帶兩個參數<br>';
$jeff->set(180,70);//只變更 身高 體重
echo $jeff->get();
echo '<br>帶一個參數<br>';
$jeff->set(190);//只變更 身高
echo $jeff->get();
echo '<br>第一個參數非數字時<br>';
$jeff->set('abc',99,'female');//這裡的值就不會寫進去
echo $jeff->get();//讀取時會讀到最後一次異動的值
echo '<br>其它非 get set 之外的方法<br>';
$jeff->gcc();
//顯示結果
/*
帶三個參數
jeff 的身高是:170
jeff 的體重是:65
jeff 的姓別是:male
帶兩個參數
jeff 的身高是:180
jeff 的體重是:70
jeff 的姓別是:male
帶一個參數
jeff 的身高是:190
jeff 的體重是:70
jeff 的姓別是:male
第一個參數非數字時
jeff 的身高是:190
jeff 的體重是:70
jeff 的姓別是:male
其它非 get set 之外的方法
找不到gcc這個方法
*/
評等結果
點擊便能為這篇文章進行評等!
[評等總次數: 0,平均評等: 0]
阿麥斯音樂棒棒糖
維力 素飄香 野菜多 素排骨雞 素紅燒牛肉 麻辣燙 麻油當歸枸杞 蔘湯麵 素食 泡麵 單包
香積麵 藥膳 風味 84gx5包 素泡麵 純素 素食 蔬食 慈濟 靜思
Xilla 露營 戶外 大力夾雲台手機支架 拓展支架 球型雲台夾 手機架