定义 : 在一个类中可以出现多个同名方法,彼此之间参数个数和类型不同
- PHP重载 : 当某些不允许的操作发生时,会自动调用的一种内部机制,来实现错误处理
- 属性重载 : 属性不存在或者权限不够时自动触发
- 方法重载 : 方法不存在或者权限不够时自动触发
- 所有的重载都需使用魔术方法实现
属性重载
get(属性名) : 访问不存在的或者权不足的属性时触发
set(属性名,属性值) : 设置不存在的或者权限不足的属性时触发
isset(属性名) : 判定不存在的或者权限不足的属性时触发
unset(属性名) : 删除不存在的或者权限不足的属性时触发<?php
// 赋值方法
// 类外部给不可调用的属性赋值时自动执行
// 形参2个 第一个代表属性名 第二个代表要赋的值
public function __set($name, $value)
{
// 限制属性赋值的范围
// 可以在类内部取给不可调用的属性赋值
if($name=="sex"){
if($value=="男" or $value=="女"){
$this->$name=$value;
}
}
if($name=="age"){
if($value>0 and $value<=150){
$this->$name=$value;
}
}
}
// 取值方法
// 类外部取不可调用的属性值时 自动执行
// 一个形参 属性名
public function __get($name)
{
return $this->$name;
}
// 类的外部销毁不可调用的属性时 自动执行
// 一个形参 属性名
public function __unset($name)
{
unset($this->$name);
}
// 判断方法
// 类的外部判断不可调用的属性是否存在时 自动执行
// 一个形参 属性名
public function __isset($name)
{
return isset($this->$name);
}
方法重载
call(方法名,方法参数列表) : 访问不存在的或者权不足的方法时触发
callStatic(方法名,方法参数列表) : 访问不存在的或者权不足的静态方法时触发<?php
// 重载 通过 __call实现
class Test{
// 类外部调用不存在方法时 执行
// 方法重载
public function __call($name, $arguments)
{
// 类外部正在调用 abc方法
if($name=='abc'){
// 参数个数为2个
if(count($arguments)==2){
return "重载1...";
}
// 参数个数为3个
if(count($arguments)==3){
return "重载2...";
}
}
}
}
$test=new Test();
// 在一个类中可以出现多个同名方法,彼此之间参数个数和类型不同
echo $test->abc(1,2); // 2个参数 执行 重载1
echo "<br>";
echo $test->abc(1,2,3); // 3个参数 执行 重载2