abstrait://重載技術(shù)//重載:動(dòng)態(tài)的創(chuàng)建類屬性和方法//屬性重載//__set(),__get(),__isset(),__unset()//const IS_ISSET = true;//const IS_GET = true;//const IS_SET = true;//const IS_UNSET = false;////class Visit//{// protecte
//重載技術(shù)
//重載:動(dòng)態(tài)的創(chuàng)建類屬性和方法
//屬性重載
//__set(),__get(),__isset(),__unset()
//const IS_ISSET = true;
//const IS_GET = true;
//const IS_SET = true;
//const IS_UNSET = false;
//
//class Visit
//{
// protected $data = [];
//
// public function __isset($name)//在判斷是否存在時(shí)自動(dòng)執(zhí)行
// {
// return IS_ISSET && isset($this->data[$name]);
// }
//
// public function __get($name)//外部對(duì)內(nèi)部的值進(jìn)行訪問(wèn)時(shí)自動(dòng)執(zhí)行
// {
// return IS_GET ? $this->data[$name] : '非法訪問(wèn)';
// }
//
// public function __set($name, $value)//對(duì)對(duì)象的成員進(jìn)行賦值是自動(dòng)調(diào)用
// {
// IS_SET ? $this->data[$name] = $value : '禁止賦值';
// }
//
// public function __unset($name)//在外部對(duì)內(nèi)部成員進(jìn)行銷毀時(shí)自動(dòng)調(diào)用
// {
// if (IS_UNSET) {
// unset($this->data[$name]);
// } else {
// echo '禁止刪除';
// }
// }
//}
//
//$visit = new Visit();
//if (isset($visit->table)) {
// echo $visit->table . '<br>';
//} else {
// $visit->table = 'table_staff';
//}
//
////訪問(wèn)
//echo $visit->table . '<br>';
//
////更新
//$visit->table = '員工表' . '<br>';
//
////訪問(wèn)
//echo $visit->table . '<br>';
//
//unset($visit->table);
//方法重載
//_call(),_callStatic()
class Site
{
public function show($argumnets)
{
$title = func_get_arg(0);//獲取方法中的參數(shù)
$desc = func_get_arg(1);
return 'Site::show()<br>站點(diǎn)名稱' . $title . '<br>站點(diǎn)描述:' . $desc;
}
public static function add($argument)
{
$m = func_get_arg(0);
$n = func_get_arg(1);
return 'Site::add()<br>'.$m.'+'.$n.'='.($m+$n);
}
}
class Web
{
//當(dāng)訪問(wèn)一個(gè)不存在的動(dòng)態(tài)方法的時(shí)候會(huì)自動(dòng)調(diào)用,$name為方法名,$arguments為參數(shù)
public function __call($name, $arguments)
{
// return '方法:'.$name.'<br>參數(shù)列表:'.var_export($arguments,true);
//方法重載更多的用在跨類的方法調(diào)用上,第一個(gè)參數(shù)為一個(gè)數(shù)組,數(shù)組的第一個(gè)值為要訪問(wèn)的類的實(shí)例化,第二個(gè)值為調(diào)用的訪問(wèn)類的方法,第二個(gè)參數(shù)為傳給該方法的值
return call_user_func_array([(new Site),'show'],$arguments);
}
//當(dāng)訪問(wèn)一個(gè)不存在的靜態(tài)方法的時(shí)候會(huì)自動(dòng)調(diào)用,$name為方法名,$arguments為參數(shù)
public static function __callStatic($name, $arguments)
{
//跨類調(diào)用一個(gè)靜態(tài)方法
return call_user_func_array(['Site','add'],$arguments);
}
}
$web = new Web();
//訪問(wèn)一個(gè)不存在的方法
echo $web->show('李銘煒','牛逼').'<hr>';
echo Web::add('1','2');
Professeur correcteur:天蓬老師Temps de correction:2019-05-13 09:31:40
Résumé du professeur:所謂重載, 其實(shí)就是對(duì)類中方法和屬性的重載, 要注意重載 與重寫的區(qū)別, 重載是發(fā)生在外部訪問(wèn)時(shí)發(fā)生, 而重寫則在是繼承的上下文環(huán)境中