资讯专栏INFORMATION COLUMN

面向对象的特性:封装性

freecode / 938人阅读

摘要:一封装的特性对象的属性或方法加上修饰符尽可能隐藏内部细节访问控制特性修饰符种类二修饰符私有性封装,外部不能调用,内部其他成员可以,用于为其他方法铺路的方法,不露出接口。

一、封装的特性

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();
    同上   

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25555.html

相关文章

  • 夯实Java:从面向对象说起

    摘要:面向对象与面向过程的区别要知道,二者并不是非此即彼,而是相辅相成的。而面向过程,则在微观上对对象内部进行具体的实现。面向对象的三大特性说到面向对象,就不得不说其三大特性封装继承和多态。封装封装是面向对象最基础的特性。 作者:伯特出处:github.com/ruicbAndroid/LoulanPlan声明:本文出自伯特的《LoulanPlan》,转载务必注明作者及出处。 刚学习 Jav...

    hearaway 评论0 收藏0
  • 面向对象概念学习和思考

    摘要:摘要本文章关注点是理解面向对象概念,从抽象的角度上去理解对象,重点包括理解对象的作用,以及理解面向对象的三大特征封装,继承,多态。特性多态不同对象以自己的方式响应相同的消息的能力叫做多态。 摘要:本文章关注点是理解面向对象概念,从抽象的角度上去理解对象,重点包括理解对象的作用,以及理解面向对象的三大特征(封装,继承,多态)。本文重点关注的是理解概念。 在理解面向对象之前,首先回答几个问...

    jzman 评论0 收藏0
  • Java-001-面向对象

    摘要:单一职责原则可以看做是低耦合高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。 Java-面向对象 什么是面过程 把题分解成一个一个步骤,每个步骤用函数实现,依次调用即可。就是说,在进行面向过程 编程的时候,不需要考虑那么多,上来先定义一个...

    gekylin 评论0 收藏0
  • [零基础学python]关于类初步认识

    摘要:反对者在某些领域对此予以否认。下面再引用一段来自维基百科中关于的历史。类的更严格的定义是由某种特定的元数据所组成的内聚的包。类还可以有运行时表示形式元对象,它为操作与类相关的元数据提供了运行时支持。 在开始部分,请看官非常非常耐心地阅读下面几个枯燥的术语解释,本来这不符合本教程的风格,但是,请看官谅解,因为列位将来一定要阅读枯燥的东西的。这些枯燥的属于解释,均来自维基百科。 1、问题...

    王岩威 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<