欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php5 学习记要(2)

程序员文章站 2022-05-02 11:49:37
...
php5 学习记录(2)

一、重载性能

1、属性和方法的重载

php 允许通过实现特殊的代理方法对属性的访问和方法的调用进行重载,这些代理方法将在相关的属性或者方法不存在时调用。这种特性让你在中端这些动作并定义你自己的功能时获得巨大的灵活性。

你可以实现下面的方法原型:

function __get($property) // 传递属性的名字,并且返回属性值

function __set($property, $value) // 传递属性的名字和新的值

function __call($method, $args) // 传递方法的名字和一个数字索引的数组,数字包含传递的参数,第一个参数的索引是0。

?

?

class Users {
    
    private $arr = array();

    function __get($name) {
        return $this->arr[$name] === NULL ? 'null' : $this->arr[$name];
    }

    function __set($name, $value) {
        $this->arr[$name] = $value;
    }

}

$user = new Users();
$user->a = 'xiezheng';
print $user->a;

__call()具有很多用途,它主要用来监控一个对象中的其他方法。如果你试着调用一个对象中不存在的方法,__call方法将会被自动调用。

?

class HelloWorld {
    function display($count) {
        for($i=0; $i';
        return $count;
    }
}

class HelloWorldCall {
    private $obj;
    function __construct() {
        $this->obj = new HelloWorld();
    }

    function __call($method, $args) {
        return call_user_func_array(array($this->obj, $method), $args);
    }
}

$hwc = new HelloWorldCall();
print $hwc->display(3);
?

?

2、使用数组语句访问的重载。

为了让你的类能够重载数组语句的访问,你的类需要实现ArrayAccess接口。

bool offsetExists($index)

mined offsetGet($index)

void offsetSet($index, $new_value)

void offsetUnset($index)

以上是ArrayAccess需要实现的方法。

?

?

class Users implements ArrayAccess {
    
    private $uname;

    function offsetExists($name) {
        return $this->uname === NULL;
    }

    function offsetGet($name) {
        return $this->offsetExists($this->uname) ? 'NULL' : $this->uname;
    }

    function offsetSet($name, $value) {
        $this->uname = $value;
    }

    function offsetUnset($name) {
        $this->uname = null;
    }

}

$user = new Users();
$user['name'] = 'xiezheng';
// unset($user['name']);
print $user['name'];
?

?

?

php5 学习记要(2)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频