oop三大特性--封装性

来源:互联网 发布:股票策略编程 编辑:程序博客网 时间:2024/05/16 17:30

http://www.cnblogs.com/zizhuyuan/archive/2011/06/13/2079905.html


/* * 封装性:面向对象三大特性之一 * * 1.就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节 *   访问权限修饰符  public protected private *   private:私有的,用这个关键字修饰的成员,只能在对象内部访问(只有用$this访问) *   *  属性可以封装: *  只要一个变量,需要在多个方法使用,就将这个变量声明为成员属性,可以直接在这个对象中的所有方法中使用 * *  成员属性,相当于这个对象中的全局变量 * *  成员属性都会在方法中使用,成员属性值的变化其实就是在改变方法的执行行为,也就是改变了对象的功能 * *  成员属性的值如果不正常,方法执行的功能叶就不正常  *   *  作用:不需要在对象外部改变或读取它的值 *  1.封装 *   再提供一个公有的方法(经过方法对对象成员属性进行赋值和取值就可以控制) * * *  方法也可以封装 * *  作用: *  1.使用private修饰使其只能在内部使用 * *  2.一个类中有100个方法,封装了95个(为另外5个服务的方法),只有5个方法可以使用 * *  100个成员属性,都让取值,不可以改值;或者只可改值,不可获取值//此种情况下使用以下方法比较方便  *  和封装有关的魔术方法: * *__set();//是直接设置[私有的]成员属性值时,自动调用的方法 *__get();//是直接获取[私有的]成员属性值时,自动调用的方法 *__isset();//是直接使用isset()查看对象中私有属性是否存在时,自动调用这个方法 *__unset();//是直接使用unset()删除对象中私有属性时,自动调用的方法 * * * * * * * */class Person{//x封装成员属性,不需要在对象外部改变private $name;private $age;private $sex;private __unset($proName){unset($this->$proName);}//是直接查看对象中私有属性是否存在时,自动调用这个方法//__isset($proName)的使用,$proName代表属性名private function __isset($proName){return isset($this->$proName);//isset()返回是否存在}function __construct($name,$age,$sex){$this->name=$name;$this->age=$age;$this->sex=$sex;}//当获取私有的成员属性时,自动调用此方法private function __get($proName){//控制所获取的值if($proName=="age"){if($this-age>40)return $this->age-10;}return $this->$proName;}//当设置私有的成员属性时,自动调用此方法private function __set($proName,$proValue){//$proName表示成员属性名,$proValue表示成员属性值//控制设置范围if($proName=="age"){if($proValue > 100 || $proValue<0)return;}$this->$proName=$proValue;}//提供公有方法来设置成员属性的值function setAge($age){//控制年龄范围,增加安全性if($age > 100 || $age < 0 )return;$this->age=$age;}//提供公有方法来获取成员属性的值function getAge(){//控制获取年龄的范围if($this->age < 30)return $this->age;else if($this->age<40)return $this->age-5;else if($this->age<50)return $this->age;elsereturn $this->age-15;提供公有方法来}function say(){echo "我的名字:{$this->name},我的年龄:{$this->age},我的姓别:{$this->sex}<br>";//访问封装过的 run()方法$this-run();}private function run(){echo '111111111111<br>'}function eat(){}//析构方法function __destruct(){}}$p1=new Person("zhangsan",25,"男");$p2=new Person;$p3=new Person;//$p1->age=-50;//因为年龄在外部随意访问,所以成员属性药封装,才有安全性。$p1->setAge(30);//通过方法来设置成员属性德值$p1->getAge();//通过方法来获取成员属性德值//通过添加家魔术方法__set($proName,$proValue) __get($proName),就可以直接调用成员属性了$p1->say();//可以调用$p1->run();//私有的方法不能直接调用//删除$p1里面的nameunset($p1->name);//判断name是否存在if(isset($p1->name)){echo "存在<br>";}else{echo "没有这个成员 <br>";}


0 0