摘要:重载技术(动态的创建类属性和方法 => 称为魔术方法); 属性重载1.__get($name.$value)2.__get($name)3.__inset($name)4.__unset($name)方法重载 1.__call($method,array $args)2.__callStatic($method,array $args)//这是require文件 <
重载技术(动态的创建类属性和方法 => 称为魔术方法);
属性重载
1.__get($name.$value)
2.__get($name)
3.__inset($name)
4.__unset($name)
方法重载
1.__call($method,array $args)
2.__callStatic($method,array $args)

//这是require文件
<?php
class Site
{
public function show($arguments){
$title = func_get_arg(0);
$desc = func_get_arg(1);
return 'Site::show():<br />站点名称'.$title.'<br />站点描述:'.$desc;
}
public static function add($arguments){
$m = func_get_arg(0);
$n = func_get_arg(1);
return 'Site::add():'. $m . '+' . $n .'='. ($m+$n);
}
}//这些变量意思是是否能进行操作预设的。
const IS_ISSET = true;
const IS_GET = true;
const IS_SET = true;
const IS_UNSET = false;
class Visit
{
protected $data = [];
//判断是否存在这个数据
public function __isset($name)
{
return isset($this->data[$name]) ? true : false;
//return IS_ISSET && isset($this->data[$name]);
}
//验证是否有就返回/否则返回'非法访问'
public function __get($name)
{
return IS_GET ? $this->data[$name]:'非法访问';
}
//赋值
public function __set($name,$value)
{
return IS_SET ? $this->data[$name] = $value : '禁止赋值';
}
//销毁
public function __unset($name)
{
if (IS_UNSET){
unset($this->data[$name]);
}else{
echo '销毁失败';
}
}
}
$test = new Visit();
//判断类是否有这个属性,没就自己赋值
if(isset($test->table)){
echo $test->table.'11<br/>';
}else{
$test->table = '员工表';
}
//访问
echo $test->table.'<br/>';
//更新赋值
$test->table = '工作表';
//访问
echo $test->table.'<br/>';
//销毁
unset($test->table);
//访问
echo $test->table.'<br/>';
/*
* 方法重载
* __call(),__callStatic()
*
* call_user_func_array([(new 某类),'方法'],$arguments)
*/
require 'public/Site.php';
class Web
{
//当访问不存在方法会自动调用
public function __call($name, $arguments)
{
//return '方法名字:'.$name.'参数为:'.var_export($arguments,true);
//方法重载多用在跨类的方法上调用
return call_user_func_array([(new Site),'show'],$arguments);
}
public static function __callStatic($name, $arguments)
{
//跨类调用静态方法
return call_user_func_array([(new Site),'add'],$arguments);
}
}
$web = new Web();
//访问不存在方法
echo $web->show('11','22'),'<hr >';
//访问不存在静态方法
echo Web::add(30,30);
批改老师:天蓬老师批改时间:2018-11-28 23:58:59
老师总结:没有示例代码, 不直观!
类成员主要是属性和方法,所有重载主要针对他们的,以及检测方法,也很好记忆