zoukankan      html  css  js  c++  java
  • PHP类的封装与继承详解

    封装

           把成员方法和成员属性封装到类中,隐藏属性和方法实现的细节,通过public、protected、private等限定类成员的访问权限,数据被保护在内部,只通过被授权的成员方法才可以操作,尽可能的对成员进行封装。

    public:方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
    protected:本类和子类可以访问,外部对象不可以调用。
    private:只能在本类访问,子类与外部对象都不可能调用。经过private标记的方法或者属性可以在继承类中重新定义,每一个类只能看到它自己定义的私有方法。

           这三个修饰符从作用范围上来讲应该像这样从大到小排序:public→protected→private之所以说是在作用范围上,是因为类把一些属性和方法进行了封装,这个封装就决定了数据的“可见性”,这样我们在类的外面不能够随意修改所定义的属性和方法而只能够进行调用,这就是封装的好处,同时也提高了安全性。
    我们给出代码示例: 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class myClass{
     public $public="Public";    //public属性
     protected $protected="Protected"; //protected属性
     private $private="Private";   //private 属性
     function say_Hello() {    //public属性
     //只是举例说明,自行添加内容
     }
     
    $obj=new myClass();
    echo $obj->public;
    //echo $obj->protected;
    //echo $obj->private;

    通过运行以上示例我们得到一个“Public”,但当你把//echo $obj->private;的注释去掉时,你会得到一下如下的错误:

    Fatal error: Cannot access protected property myClass::$protected in E:apachehtdocsexamplefile.php on line 13。

    可以看到我们不能随意去访问类的属性定义,我们在“外面”是不知道这个类中到底有那些成员,因为这些成员对于其他的类可能是不可的。当然如果我们一定要访问或者修改定义为“私有”的属性时,也可以使用PHP所提供的系统方法:_get()和_set()。 

    继承

           可以使一个类继承并拥有另一个已经存在类的成员属性和方法,被继承的类称为父类或基类,继承类为子类。通过extends关键字实现继承关系。通俗来说,要有继承就得有一个“根源”,这“根源”你可能想像你以后生了儿子或者女儿,他们会从你这里得到一些“东西(属性和方法)”,这样你的“后代”就是持有你(根源)所有的一些特征了。

    产生“根源”类(父类或者基类)
    语法:class father{
    }

    产生“后代”(子类)
    语法:class son extends father{
    }

    PHP extends类继承示例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    class father{
     protected $name;
     function __construct($name){  //构造函数
      $this->name=$name;
     }
      
     function work(){
      echo "{$this->name}我在工作;
     }
     function __destruct(){}  //析构函数
    }
      
    class son extends father{  //继承父类
     function play(){
      echo "{$this->name}我在玩游戏;
     
    }
      
     $my_father=new father(“爸爸”);  //创建父类对象
     $my_father->work();
     
     $my_son=new son(“儿子”);
     $my_son->work();
     $my_son->play();

    解析:在父类father里,我们定义了一般的属性和方法,然后定义子类。你可能发现在子类里内是没有构造函数和析构函数的,因为子类是继承了父类的所有方法,所以可以调用$my_son->work(); 这就是PHP类的继承了。另外要注意:PHP不能多层继承,如:class A extends B extends C,这样的继承在PHP中是无效的,PHP里只有单继承,不能多继承,需要其他办法变相“实现”多继承。

  • 相关阅读:
    ORACLE EBS中查看某个Request的Output File
    如何查看非自己提交的请求的结果
    ORACLE EBS中OAF屏蔽的错误
    对OAF开发中的MDS的初步研究(转)
    MapGuide应用最佳实践资源库Repository的维护
    MapGuide OpenSource 2.1在Windows 7上运行
    MapGuide应用最佳实践采用托管(Managed)资源还是非托管(Unmanaged)资源
    MapGuide Open Source 2.1 正式发布
    Autodesk 2009开发者日现在开始报名
    支持Windows 7的CAD—AutoCAD Civil 3D 2010
  • 原文地址:https://www.cnblogs.com/xiongxionglove/p/7260708.html
Copyright © 2011-2022 走看看