首頁 > 後端開發 > php教程 > php5 学习记要(2)

php5 学习记要(2)

WBOY
發布: 2016-06-13 10:41:09
原創
881 人瀏覽過

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'];
登入後複製
?

?

?

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板