PHP码农进化史2 【转】

来源:互联网 发布:美工教程 编辑:程序博客网 时间:2024/05/16 02:03

 

1.是否可以在类的外部访问一个属性是由访问修饰符来确定的。

 

2.从类的外部直接访问类的属性是糟糕的想法。面向对象的一个方法就是鼓励封装。在PHP中,我们一般通过__get()与__set()函数来实现对

属性的访问.如果不直接访问一个类的属性而是编写访问函数,那么可以通过一段代码执行所有访问。最初的访问函数如下所示:
class classname {
    public $attribute;
    function __get($name) {
        return $this->$name;
    }
    function __set($name, $value){
        $this->$name = $value;
   }
}

 

3.此访问器函数的原理就是这样:只使用一段代码来访问特定属性。由于只有一个入口,就可以对要保存的数据进行检查,可以确保保存的数

据是有意义的数据。例如:
function _set ($name, $value) {
    if( ($name == "attribute") && ($value >= 0) && ($value <= 100) ) {
        $this->attribute = $value;
    }
}

 

4.通过单一的访问入口,可以方便地改变潜在的程序实现。如果由于某种原因,需要改变属性$attribute的保存方式,访问器函数允许我们只

要修改一处代码,就可以完成此工作。

 

5.__get(),__set(),__isset(),__unset().
一般来说,总是把类的属性定义为private,这样更复合现实逻辑。
__get(),__set():用来获取和赋值其属性.他们不是默认存在的,而是我们手工添加进去的。
__isset(),__unset():来检查属性和删除属性。

 

6.__get()与__set(),__isset()与__unset()的一般添加方法。
//__get()方法用来获取私有属性.
private function __get($property_name) {
    if (isset($this -> property_name)) {
        return($this -> $property_name);
    } else {
        return(NULL);
    }
}

//__set()方法设置私有属性
private function __set($property_name,$value) {
    $this -> $property_name = $value;
}
//__isset()方法可以设为私有
private function __isset($property_name) {
    echo "当在类外部使用isset()函数测定私有成员$nm时,自动调用<br />";
    return isset($this -> $property_name);
}
//__unset()方法可以设为私有
private function __unset($property_name) {
    $this ->unset($this -> property_name);
}


7.__get()方法
用来获取私有成员的属性值。用一个参数传入你要获取的私有成员的属性名称,就能获得其属性值,这个方法不用手工去调用,是在直接获取

私有属性的值的时候自动调用的。若不设定,是无法在类外调取私有属性的;若加上这方法,系统在执行"$xx -> name"这样的语句的时候就

会自动调用__get()方法。从而使我们可以使用私有函数。

 

8.__set()方法
在设置私有属性值时自动调用。(说是私有,公有的都一样,很牛的权限!)。没有他,像是$this->name = "value"会出错。有了它,就会自

动设定值。

 

9.__isset()方法
通过isset()函数的调用,达到自动测定属性是否设置。"isset()"是测定变量是否测定的函数,传入一个变量作为参数,若存在,则是true.

若不存在,则是false.在对象外使用"isset()"函数来测定是否被设定的话只能测定公有成员。因为私有属性被封装,外部不可见。在类的内

部加上__isset()函数的话,在外部进行isset()的判断时,会自动调用__isset()函数。*__isset()共有私有没有好大关系。

 

10.__unset()方法
同__isset()方法一样,只是他的目的是在对象外删除对象内的函数。管他是私有还是共有。

 

11.小结
这几个函数存在的目的就是提权,把原本在对象外不能做的事情(创建设定获取删除私有参数)变为了可能。

 

 

 

原创粉丝点击