abstract://重載技術//重載:動態(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
//重載技術
//重載:動態(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)//在判斷是否存在時自動執(zhí)行
// {
// return IS_ISSET && isset($this->data[$name]);
// }
//
// public function __get($name)//外部對內(nèi)部的值進行訪問時自動執(zhí)行
// {
// return IS_GET ? $this->data[$name] : '非法訪問';
// }
//
// public function __set($name, $value)//對對象的成員進行賦值是自動調(diào)用
// {
// IS_SET ? $this->data[$name] = $value : '禁止賦值';
// }
//
// public function __unset($name)//在外部對內(nèi)部成員進行銷毀時自動調(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';
//}
//
////訪問
//echo $visit->table . '<br>';
//
////更新
//$visit->table = '員工表' . '<br>';
//
////訪問
//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>站點名稱' . $title . '<br>站點描述:' . $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
{
//當訪問一個不存在的動態(tài)方法的時候會自動調(diào)用,$name為方法名,$arguments為參數(shù)
public function __call($name, $arguments)
{
// return '方法:'.$name.'<br>參數(shù)列表:'.var_export($arguments,true);
//方法重載更多的用在跨類的方法調(diào)用上,第一個參數(shù)為一個數(shù)組,數(shù)組的第一個值為要訪問的類的實例化,第二個值為調(diào)用的訪問類的方法,第二個參數(shù)為傳給該方法的值
return call_user_func_array([(new Site),'show'],$arguments);
}
//當訪問一個不存在的靜態(tài)方法的時候會自動調(diào)用,$name為方法名,$arguments為參數(shù)
public static function __callStatic($name, $arguments)
{
//跨類調(diào)用一個靜態(tài)方法
return call_user_func_array(['Site','add'],$arguments);
}
}
$web = new Web();
//訪問一個不存在的方法
echo $web->show('李銘煒','牛逼').'<hr>';
echo Web::add('1','2');
Correcting teacher:天蓬老師Correction time:2019-05-13 09:31:40
Teacher's summary:所謂重載, 其實就是對類中方法和屬性的重載, 要注意重載 與重寫的區(qū)別, 重載是發(fā)生在外部訪問時發(fā)生, 而重寫則在是繼承的上下文環(huán)境中