PHP面向对象1-重载overloading

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";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值