【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

原文地址:https://www.cnblogs.com/peilanluo/p/6822047.html