PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)

面向对象的三大特性:封装性、继承性、多态性

抽象的定义:在定义一个类的时候,通常把一类事物共有的属性和行为提取出来,形成一个物理模型,这种研究的方法称为抽象。

一、封装性

封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保存在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作。

public 表示全局,本类内部,类外部,子类都可以访问 
protected 表示受保护的,只有本类或子类可以访问 
private 表示私有的,只有本类内部可以访问 

 1 <?php 
 2 class Person{ 
 3     public $name; 
 4     protected $age; 
 5     private $salary; 
 6     function __construct($name,$age,$salary){ 
 7         $this->name=$name; 
 8         $this->age=$age; 
 9         $this->salary=$salary; 
10     } 
11     public function showinfo(){ 
12         echo $this->name."||".$this->age."||".$this->salary; 
13     } 
14 } 
15 $p1=new Person('张三',20,3000); 
16 $p1->showinfo();
17 ?> 

二、继承性

 1 <?php 
 2 class Students{ 
 3     public $name; 
 4     public $age; 
 5     public function __construct($name,$age){ 
 6         $this->name=$name;
 7         $this->age=$age;
 8     }
 9     public function showinfo(){ 
10         echo $this->name.'||'.$this->age; 
11     } 
12 } 
13 class Pupil extends Students{ 
14     function testing(){ 
15         echo 'Pupil '.$this->name.' is testing'; 
16     } 
17 } 
18 class Graduate extends Students{ 
19     function testing(){ 
20         echo 'Graduate '.$this->name.' is testing'; 
21     } 
22 } 
23 $stu1=new Pupil('张三',20); 
24 $stu1->showinfo(); 
25 echo '<br/>'; 
26 $stu1->testing(); 
27 ?> 

三、多态性

 1 <?php 
 2 class Animal{ 
 3 public $name; 
 4 public $price; 
 5 function cry(){ 
 6 echo "i don't know"; 
 7 } 
 8 } 
 9 class Dog extends Animal{ 
10 
11 function cry(){ 
12 echo 'Wang Wang!'; 
13 Animal::cry();
14 } 
15 } 
16 $dog1=new Dog(); 
17 $dog1->cry(); 
18 ?>

1、当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法如何写,可以让子类去覆盖它的方法,方法覆盖(重写),必须要求子类的方法名和参数个数完全一致 
2、如果子类要去调用父类的某个方法(protected/public),可以使用 父类名::方法名 或者 parent::方法名 
3、在实现方法重写的时候,访问修饰符可以不一样,但是子类方法的访问权限必须大于等于父类方法的访问权限(即不能缩小父类方法的访问权限) 
如 父类public function cry(){} 子类 protected function cry(){} 则会报错 
但是子类的访问权限可以放大,如: 
父类private function cry(){} 子类 protected function cry(){} 可以正确执行 

public 表示全局,本类内部,类外部,子类都可以访问 
protected 表示受保护的,只有本类或子类可以访问 
private 表示私有的,只有本类内部可以访问 

原文地址:https://www.cnblogs.com/hell0x/p/5568252.html