面向对象的3大特性

    xiaoxiao2021-03-25  81

    1.封装 **** 目的:为了使一个类更加安全

    做法: **** 1.将成员变量变为私有的 2.再类中做方法来间接访问成员变量 3.在方法中加入控制条件

     //一个成员变量还是可以的,但是不适用于多个成员变量(即可写也可读)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class  Ren {      public  $code ;    //人员代号      public  $name ;    //人员姓名      private  $sex ;     //人员性别      private  $age ;     //人员年龄            //构造函数:用来初始化性别      function  __construct( $s )      {          $this ->sex= $s ;      }                   //造一个修改年龄的方法   写      function  SetAge( $a )      {          if ( $a >18 &&  $a <50)    //条件满足才往下进行          {              $this ->age= $a ;            }      }            //造一个获取age值得方法   读      function  GetAge()      {          return  $this ->age;        } }   //造对象 $r = new  Ren( "男" ); $r ->SetAge(60);  /条件是18-50之间的年龄,60超出了,所以显示的null<br>var_dump( $r );

    //对于多个变量就可以使用下面的方法

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 class  Ren {      public  $code ;    //人员代号      public  $name ;    //人员姓名      private  $sex ;     //人员性别      private  $age ;     //人员年龄            //构造函数:用来初始化性别      function  __construct( $s )      {          $this ->sex= $s ;      }            //__set()魔术方法,给变量赋值      function  __set( $n , $v )    //固定要有两个参数:变量名称,变量的值      {          if ( $n == "age" )           {              if ( $v >18 &&  $v <50)   //限制条件              {                 $this -> $n  =  $v ;                 }          }          else          {             $this -> $n  =  $v ;                 }      }            //__get()魔术方法,取变量值      function  __get( $n )     //一个变量名      {          return  $this -> $n ;         }       }   //造对象 $r = new  Ren( "男" ); $r ->age=70;       //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数 $r ->name= "zha" ;      //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数 echo  $r ->sex;     //自动调用__get()方法<br>var_dump($r);

    //另一个知识点

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class  Dog {      public  $name ;      function  Jiao()      {         echo  $this ->name. "囧" ;    //注意        }        function  Setname( $n )      {         $this ->name= $n ;         return  $this ;    //返回新的对象      } } $d = new  Dog(); $d ->Setname( "1" )->Jiao();   //连续调对象

    2.继承

    父类 子类:可以继承父类的一切 重写的关键字override,子类对父类的方法

    特点:单继承:一个子类只能有一个父类,一个父类可以有多

    例子:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class  Ren {      public  $name ;      function  Say()      {          echo  $this ->name. "正在说话" ;      }         } class  China  extends  Ren    //关键字 extend {      //子类对父类的方法进行重写      function  Say()      {          parent::Say();     //在子类中调用父类的成员:找父类中的这个方法,把方法中的内容全部拿过来          echo  "你好" ;       } }   $c = new  China(); $c ->Say(); var_dump( $c );

    子类对父类的方法重写后,父类的方法还有,另外加了一个方法,所以输出时是:正在说话你好  

    overlord 重载

    重载:它可以是类中的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑;重载是多态中的一种:编译多态

     

    3.多态 当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法时表现出的不同,称为多态:运行多态

    条件有4个: 1.要有继承 2.父类引用指向子类实例 3.要有重写 4.调重写方法

    转载请注明原文地址: https://ju.6miu.com/read-18126.html

    最新回复(0)