面向对象的三大特性:封装性、继承性、多态性
抽象的定义:在定义一个类的时候,通常把一类事物共有的属性和行为提取出来,形成一个物理模型,这种研究的方法称为抽象。
一、封装性
封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保存在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作。
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 表示私有的,只有本类内部可以访问