PHP中的重载,并不是传统意义上的重载。
当程序中碰到未定义的属性或方法时,自动调用对应的方法进行处理,就是PHP中的重载!!!
链接:http://www.php.net/manual/zh/language.oop5.overloading.php
1.属性重载
__set(),__get(),__isset(),__unset()四个方法,分别用于赋值,取值,判断是否赋值,释放。
1.__set()
赋值时,如果属性不存在,则自动调用该方法。
private $data = array();
function __set($name, $value) {
$this->data[$name] = $value;
}
2.__get()
取值时,如果属性不存在,则自动调用该方法。
private $data = array();
function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
$trace = debug_backtrace();
trigger_error(
'Undefined property via __get(): ' . $name .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}
3.__isset()
判断属性是否存在时,如果属性不存在,则自动调用该方法。
private $data = array();
function __isset($name) {
return isset($this->data[$name]);
}
4.__unset()
释放属性时,如果属性不存在,则自动调用该方法。
private $data = array();
function __unset($name) {
unset($this->data[$name]);
}
2.方法重载
__call(),__callStatic()总共2个方法,分别会在对象中调用不可访问方法时或在静态上下文中调用不可访问方法时被调用。
1.__call()
在对象中调用一个不可访问方法时,__call() 会被调用。
function __call($name, $arguments) {
echo "Calling object method '$name' "
. implode(', ', $arguments). "\n";
}
2.__callStatic()
在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。
function __callStatic($name, $arguments) {
echo "Calling static method '$name' "
. implode(', ', $arguments). "\n";
}