========概念=========
一、类与对象关系:
1、类实例化对象
2、类诞生对象
3、类生产出对象
二、类的组成部分:
1、属性(变量)
2、方法(函数)
三、定义一个类:
1、使用关键字class
2、命名采用驼峰法
3、造对象并调用属性和方法
class Person{ public $name; public $age; public function __construct($n,$a){ $this->name=$n; $this->age=$a; } public function say(){ echo "my name is {$this->name},my age is {$this->age}"; } }
四、$this作用:永远代表本对象
五、构造方法:public function __construct(){}
对象在诞生之前会触发
六、析构方法:public function __destruct(){}
对象在消失之前会触发
注:类的方法中使用属性时,必须加上$this
========面向对象的三大特性===============
一、封装
1、封装的概念:隐藏属性、方法或实现细节的过程称为封装
2、类的封装修饰词:
(1)、public:公开的(类外面可以访问,子类可以访问,父类可以访问)
(2)、protected:被保护的(类外面不能访问,子类可以访问,父类可以访问)
(3)、private:私有的(类外面不能访问,子类不能访问,父类可以访问)
3、类的封装作用:
(1)、部分方法要对外开放.
(2)、部分方法要对外封锁.
二、继承
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
关键字:extends
对父类构造方法的继承
子类完成继承后,自动继承父类的属性和方法
三、多态
多态就是指一个类实例的相同方法在不同情形有不同表现形式。
<?php //接口 interface Usb{ public function load(); public function start(); public function unload(); } class Upan implements Usb{//优盘 public function load(){ echo "Upan is load"; } public function start(){ echo "Upan is unloading"; } public function unload(){ echo "Upan is unloading"; } } class Udisk implements Usb{//充电宝 public function load(){ echo "Udisk is load"; } public function start(){ echo "Udisk is unloading"; } public function unload(){ echo "Udisk is unloading"; } } //盗版厂商的usb class FalUsb{ public function load(){ echo "FalUsb is load"; } public function start(){ echo "FalUsb is unloading"; } public function unload(){ echo "FalUsb is unloading"; } } //------------------------------------- $obj1 = new Upan(); $obj2 = new Udisk(); $obj3 = new FalUsb();//盗版 /* * function useUsb($o){ $o->load(); $o->start(); $o->unload(); echo "<hr>"; } */ function useUsb(Usb $o){//方法括号中规定$o必须是Usb的子类 $o->load(); $o->start(); $o->unload(); echo "<hr>"; } useUsb($obj1); useUsb($obj2); useUsb($obj3);//这个会报错:Catchable fatal error: Argument 1 passed to useUsb() must implement interface Usb ?>
===============抽象类========
一、关键字abstract
二、含有抽象方法的类是抽象类
三、抽象方法:未被实现的方法(abstract public function unload();)
四、子类中必须实现父类的抽象方法,否则报错
abstract class Usb{ public function load(){ echo "usb is loading"; } public function start(){ echo "usb is starting"; } abstract public function unload();//抽象方法 } class Upan extends Usb{ public function unload(){//子类中必须实现父类的抽象方法,否则报错 echo "usb is unloading"; } }
===========接口==========
一、关键字interface
二、只含有抽象方法、不能含有普通方法
三、子类中必须实现接口的所有的抽象方法,否则报错
四、子类不能用extends继承,用implements实现接口
五、接口中的方法都是抽象方法,不能加abstract
//接口 interface Usb1{ public function load(); public function start(); public function unload(); } class Upan1 implements Usb1{//子类中必须实现父类的所有抽象方法,否则报错 public function load(){ echo "usb is load"; } public function start(){ echo "usb is unloading"; } public function unload(){ echo "usb is unloading"; } }
六、一个子类可以实现多个接口
//接口 interface Usb1{ public function load(); public function start(); public function unload(); } interface PressKey{ public function run(); public function say(); } class Upan1 implements Usb1,PressKey{//一个子类可实现多个接口 public function load(){ echo "usb is load"; } public function start(){ echo "usb is unloading"; } public function unload(){ echo "usb is unloading"; } public function run(){ echo "usb is run"; } public function say(){ echo "usb is say"; }
七、接口扩展,即一个子接口继承父类接口所有的抽象方法
//接口 interface Usb1{ public function load(); public function start(); public function unload(); } interface Usb2 extends Usb1{//接口也可以继承其他的接口 public function run(); } class Upan1 implements Usb2{ public function load(){ echo "usb is load"; } public function start(){ echo "usb is unloading"; } public function unload(){ echo "usb is unloading"; } public function run(){ echo "usb is run"; } }