您的位置:首页 > 编程语言 > PHP开发

PHP面向对象1-重载overloading

2017-06-07 22:47 295 查看
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";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: