• 【php】面向对象(二)


    一、 封装:
      a) 描述:使用成员修饰符修饰成员属性和成员方法,能够最大限度的隐藏对象内部的细节,保证对象的安全
      b) PPP修饰符:public(公共的),protected(受保护的),private(私有的)
      c) Protected和private修饰符所修饰的成员属性,在类的外部不能进行访问
      d) Protected和private修饰符所修饰的成员方法,砸类的外部也不能进行访问
    二、 魔术方法:
      a) Music => gusic
        i. g => __get
          1. 自动执行的场景:
            a) 当我们在外部访问一个非公有的成员属性或不存在的成员属性时,会自动调用
            b) 当自动调用__get方法时,会将正在访问的成员属性名称传递到__get方法内部

     1 define('AUTH',1);    //1.开启   0.关闭
     2 
     3 //声明一个女神类
     4 class Godness{
     5     
     6     //特征 => 成员属性
     7     public $name;
     8     protected $age;
     9     private $sanwei;
    10     
    11     //构造方法
    12     public function __construct($name,$age,$sanwei){
    13         $this->name = $name;
    14         $this->age = $age;
    15         $this->sanwei = $sanwei;
    16     }
    17     
    18     //功能 => 成员方法
    19     public function sing(){
    20         echo '我正在唱歌中……么么哒!!';
    21     }
    22     
    23     protected function dance($name){
    24         echo '我正在和'.$name.'跳舞中……哈哈哈!!';
    25     }
    26     
    27     private function action(){
    28         echo '我正在和胡歌一起拍电影中!';
    29     }
    30     
    31     //__get魔术方法(当我们访问一个不存在的成员属性或非公有的成员属性,会自动调用)
    32     public function __get($name){
    33         
    34         if(AUTH){
    35             if(isset($this->$name)){
    36                 return $this->$name;
    37             }else{
    38                 return false;
    39             }
    40         }else{
    41             return false;
    42         }
    43     }
    44 }
    45 
    46 //实例化一个女神
    47 $gaoyuanyuan = new Godness('高圆圆','32','80,50,80');
    48 
    49 //访问一个非公有的属性
    50 echo $gaoyuanyuan->sanwei;        //80,50,80
    51 
    52 //访问一个不存在的属性
    53 var_dump($gaoyuanyuan->sex);    //D:wampwwwlamp183lesson29_oop23.php:87:boolean false

        ii. u => __unset
          1. 自动执行的场景:
            a) 当我们在类的外部销毁一个非公有的成员属性时,会自动调用
            b) 当自动调用__unset方法时,会将正在销毁的成员属性名称传递到__unset方法内部

     1 define('AUTH',1);    //1.开启   0.关闭
     2 
     3 //声明一个女神类
     4 class Godness{
     5     
     6     //特征 => 成员属性
     7     public $name;
     8     protected $age;
     9     private $sanwei;
    10     
    11     //构造方法
    12     public function __construct($name,$age,$sanwei){
    13         $this->name = $name;
    14         $this->age = $age;
    15         $this->sanwei = $sanwei;
    16     }
    17     
    18     //功能 => 成员方法
    19     public function sing(){
    20         echo '我正在唱歌中……么么哒!!';
    21     }
    22     
    23     protected function dance($name){
    24         echo '我正在和'.$name.'跳舞中……哈哈哈!!';
    25     }
    26     
    27     private function action(){
    28         echo '我正在和胡歌一起拍电影中!';
    29     }
    30 
    31     //__unset魔术方法(当我们销毁一个非公有的成员属性时,会自动调用)
    32     public function __unset($name){
    33         if(AUTH){
    34             unset($this->$name);
    35         }
    36     }
    37 }
    38 
    39 //实例化一个女神
    40 $gaoyuanyuan = new Godness('高圆圆','32','80,50,80');
    41 
    42 //销毁一个非公有的属性
    43 unset($gaoyuanyuan->age);
    44 unset($gaoyuanyuan->sanwei);
    45 var_dump($gaoyuanyuan);
    46 
    47 //结果
    48 object(Godness)[1]
    49   public 'name' => string '高圆圆' (length=9)

        iii. s => __set
          1. 自动执行的场景
            a) 当我们在类的外部设置一个非公有属性值时,会自动调用
            b) 参数:会自动传递正在设置的参数名以及设置的参数值这两个参数到__set方法内部

     1 define('AUTH',1);    //1.开启   0.关闭
     2 
     3 //声明一个女神类
     4 class Godness{
     5     
     6     //特征 => 成员属性
     7     public $name;
     8     protected $age;
     9     private $sanwei;
    10     
    11     //构造方法
    12     public function __construct($name,$age,$sanwei){
    13         $this->name = $name;
    14         $this->age = $age;
    15         $this->sanwei = $sanwei;
    16     }
    17     
    18     //功能 => 成员方法
    19     public function sing(){
    20         echo '我正在唱歌中……么么哒!!';
    21     }
    22     
    23     protected function dance($name){
    24         echo '我正在和'.$name.'跳舞中……哈哈哈!!';
    25     }
    26     
    27     private function action(){
    28         echo '我正在和胡歌一起拍电影中!';
    29     }
    30 
    31     //__set魔术方法(当我们设置一个非公成员属性时,会自动调用)
    32     public function __set($name,$value){
    33         if(AUTH){
    34             $this->$name = $value;
    35         }
    36     }
    37 }
    38 
    39 //实例化一个女神
    40 $gaoyuanyuan = new Godness('高圆圆','32','80,50,80');
    41 
    42 //修改一个非公有的属性
    43 $gaoyuanyuan->sanwei = '100,80,100';
    44 $gaoyuanyuan->age = 20;
    45 var_dump($gaoyuanyuan);
    46 
    47 //结果
    48 object(Godness)[1]
    49   public 'name' => string '高圆圆' (length=9)
    50   protected 'age' => int 20
    51   private 'sanwei' => string '100,80,100' (length=10)

        iv. i => __isset
          1. 自动执行场景:
            a) 当我们在类的外部判断一个非公有属性或不存在的属性是否存在时,会自动调用
            b) 参数:会自动传递正在判断的成员属性名到__isset方法内部

     1 define('AUTH',1);    //1.开启   0.关闭
     2 
     3 //声明一个女神类
     4 class Godness{
     5     
     6     //特征 => 成员属性
     7     public $name;
     8     protected $age;
     9     private $sanwei;
    10     
    11     //构造方法
    12     public function __construct($name,$age,$sanwei){
    13         $this->name = $name;
    14         $this->age = $age;
    15         $this->sanwei = $sanwei;
    16     }
    17     
    18     //功能 => 成员方法
    19     public function sing(){
    20         echo '我正在唱歌中……么么哒!!';
    21     }
    22     
    23     protected function dance($name){
    24         echo '我正在和'.$name.'跳舞中……哈哈哈!!';
    25     }
    26     
    27     private function action(){
    28         echo '我正在和胡歌一起拍电影中!';
    29     }
    30     
    31     //__isset魔术方法(当我们判断一个非公有属性或不存在的成员属性时,会自动调用)
    32     public function __isset($name){
    33         if(AUTH){
    34             return isset($this->$name);
    35         }
    36     }
    37 }
    38 
    39 //实例化一个女神
    40 $gaoyuanyuan = new Godness('高圆圆','32','80,50,80');
    41 
    42 //判断一个非公有属性是否存在
    43 var_dump(isset($gaoyuanyuan->sex));        //D:wampwwwlamp183lesson29_oop23.php:99:boolean false

        v. c => __call
          1. 自动执行场景:
            a) 当我们在类的外部调用一个非公有的方法的时候,会自动调用
            b) 参数:会自动传递正在调用的方法的名称以及参数列表到__call方法内部(注意:参数列表接收到的是一个数组)

     1 define('AUTH',1);    //1.开启   0.关闭
     2 
     3 //声明一个女神类
     4 class Godness{
     5     
     6     //特征 => 成员属性
     7     public $name;
     8     protected $age;
     9     private $sanwei;
    10     
    11     //构造方法
    12     public function __construct($name,$age,$sanwei){
    13         $this->name = $name;
    14         $this->age = $age;
    15         $this->sanwei = $sanwei;
    16     }
    17     
    18     //功能 => 成员方法
    19     public function sing(){
    20         echo '我正在唱歌中……么么哒!!';
    21     }
    22     
    23     protected function dance($name){
    24         echo '我正在和'.$name.'跳舞中……哈哈哈!!';
    25     }
    26     
    27     private function action(){
    28         echo '我正在和胡歌一起拍电影中!';
    29     }
    30     
    31     //__call魔术方法(当我们调用一个非公有方法时,会自动调用)
    32     public function __call($funcName,$args){
    33         
    34         if(AUTH){
    35             $args = implode(',',$args);
    36             return $this->$funcName($args);
    37         }
    38         
    39     }
    40     
    41 }
    42 
    43 //实例化一个女神
    44 $gaoyuanyuan = new Godness('高圆圆','32','80,50,80');
    45 
    46 //调用一个非公有的方法
    47 $gaoyuanyuan->dance('符泰迪','李腊肠','李赖赖');    //我正在和符泰迪,李腊肠,李赖赖跳舞中……哈哈哈!!

    三、 继承:
      a) 继承的使用场景:
        i. 我没有,但是别人(别的类)有,那么,我直接把那个人(那个类)拥有的成员属性和成员方法继承过来;
        ii. 继承之后的结果:父类当中所有的成员属性和成员方法都可以继承,(包括构造方法和析构方法),但是除了私有的成员;
        iii. 继承的格式:class A extends B{}
        iv. 试验:PPP修饰符的访问控制
          在类的外部 在子类 在本类
          Public           √   √   √
          Protected    ×   √   √
          Private         ×   ×       √

        v. 子类对父类的重写:
          1. 如果子类当中的方法与父类当中的方法同名,则子类的方法会将父类的方法覆盖!如果我们调用该方法,调用的时子类的方法,而不是父类的!
          2. 如果你需要使用到父类当中这一个同名的方法时,需要使用一个关键字:
            a) Parent::父类当中的方法名;
        vi. PHP当中的单继承:
          1. 如果一个类想要继承多各类,不能同时继承多各类,而可以采用链式继承
          2. 格式:class A extends B{} class B extends C{}

    四、 自动转换为布尔型假的情况
      a) 四种标量
        i. 整型:0
        ii. 浮点型:0.0或0.00
        iii. 字符串型:’’或’0’
        iv. 布尔型:false
      b) 两种复合
        i. 对象型:不行
        ii. 数组型:array();
      c) 两种特殊
        i. 资源型:不行
        ii. 空型:null或NULL或Null

  • 相关阅读:
    1.Python进阶 词典dict
    10.Python基础 反过头来看看
    test
    地图添加标记物 并添加点击弹出框
    百度地图里面添加覆盖物的事件显示最后一个?
    css3之animation制作闪烁文字效果 转
    ajax beforeSend中无效果
    jquery 中 $('div','li')是什么意思?
    SQL 单引号转义
    jQuery 遍历
  • 原文地址:https://www.cnblogs.com/peilanluo/p/6822047.html
Copyright © 2020-2023  润新知