一、封装的特性

1.对象的属性或方法加上修饰符
2.尽可能隐藏内部细节
3.访问控制
4.PHP5特性
5.修饰符种类:public/private/protected/var

二、修饰符

1.private:
    a.私有性封装,外部不能调用,内部其他成员可以,用于为其他方法铺路的方法,不露出接口。
    b.构造、析构方法一般不封装。
    c.属性私有化是最常见的,私有化后,可用相应的方法将改变属性的行为暴露出来,并限制在可控范围内
    
    class Person {
        private $name="wo";
        function setName($str){
            if($str==="ni")
            $this->name=$str;
        }
        function getName(){
            echo $this->name;
        }
    };

三、魔术方法

新版本不能对魔术方法进行私有封装,魔术方法对private/protected属性有效
1.__get($pro);
    直接访问私有属性时自动调用,属性名传给$pro,如下:
    class Person {
        private $name="wo";
        private $age=11;
        private $sex="nan";
        function __get($pro){
            return $pro;
        }    
    };
    $p1=new Person();
    echo $p1->name;
    echo $p1->age;
    echo $p1->sex;
    //都是############
    class Person {
        private $name="wo";
        private $age=11;
        private $sex="nan";
        function __get($pro){
            return $this->$pro;
        }    
    };
    $p1=new Person();
    echo $p1->name;
    echo $p1->age;
    echo $p1->sex;
    //wo11nan
2.__set($name,$value);
    直接设置私有属性时自动调用,赋予属性名$name为$value值,如下:
    class Person {
        private $name="wo";
        private $age=11;
        private $sex="nan";
        function __get($pro){
            return $this->$pro;
        }    
        function __set($pro,$value){
            //限制外部修改条件
            if($pro==="name"){
                if($value==="nii"){
                    $this->$pro=$value;
                }
            }else{
                return false;
            }
        }
    };
    $p1=new Person();
    $p1->name="nii";
    echo $p1->name;
    //nii
    
3.__isset($name);
    类内部添加__isset()方法时,私有属性不能用isset判断,添加后,外部使用isset如遇私有属性,自动调用对象内的__isset();,参数是属性名,如下:
    class Person {
        private $name="wo";
        private $age=11;
        private $sex="nan";
        function __get($pro){
            return $this->$pro;
        }    
        function __set($pro,$value){
            if($pro==="name"){
                if($value==="nii"){
                    $this->$pro=$value;
                }
            }else{
                return false;
            }    
        }
        function __isset($pro){
            return $pro;
        }
    };
    $p1=new Person();
    if(isset($p1->name)){
        echo "属性存在";
    }else{
        echo "属性不存在";
    }
    //属性存在
    
4.__unset();
    同上   

1111
93 声望10 粉丝