PHP-6面向对象
基本概念
- 类(class):属性和方法的集合。(可以简单理解为带有函数的结构体)
- 对象:类的实例化。
- 三大特点:封装、继承、多态。
- 封装:对类的使用和实现分离,用户只需要掌握接口。
- 继承:子类可以直接使用父类的属性和方法,简化了类操作,提高代码重用性。
- 多态:同一个类的不同对象,使用同一个方法可以得到不同的结果。提高代码重用性和程序的灵活性。。
类的操作
声明
- 定义类:
权限修饰符 class 类名{
类体;
}
- 权限修饰符:
public private protected
- 成员属性:也称成员变量,用于记录类的属性信息。php中可以为标量类型和复合类型。不能为空类型和资源。
- 成员常量:关键字
const
。eg.const PI = 3.14159
。常量的输出可以不需要类的实例化类名::常量名
。 - 成员方法:也称成员函数,同一般函数。
- 权限修饰符:
实例化
- 对象的创建:
$对象名 = new 类名([参数]);
- 类成员的访问:
$对象名->成员属性;
$对象名->成员方法();
- $this操作符:表示对变量本身的引用eg.
\$this->属性; \$this->方法;
属性名前没有$
构造&析构
- 构造方法:对象创建成功后第一个被对象自动调用的方法。如果没有声明构造方法,系统会自动生成一个没有参数,且内容为空的构造方法,一个类只有一个构造方法。格式
function __construct();
- 析构方法:为创建对象的可选方法,一般是完成对象销毁前的清理工作。
封装
权限修饰符
- public :可以在程序的任何地点被其它类和对象调用,子类可以继承父类的公共成员。
- private:只能在所属类的内部被调用和修改,外部类(即使子类)不能调用修改。
- protected:只有本类和子类可以调用它,其它地方不行。
- ps:权限修饰符用于类定义前和成员声明前,如果省略权修饰符,默认为public
继承
- 关键字extends:
class 子类名 extends 父类名 { 类体; }
子类可以拥有自己和父类的所有属性。 - ::操作符:
::
可以在没有声明任何实例的情况下访问类成员。 用法:关键字 :: 变量/常量/方法;
其中关键字有如下三种:- parent:调用父类成员
- self:调用自身成员
- 类名:调用此类的成员
- 覆盖父类方法:在子类中对父类的同名方法进行重写,此方法必须和父类方法有相同的名称,参数,返回值。
- 关键字static:用于修饰成员变量和成员函数。静态变量和静态函数可以不用对象而使用类名直接访问。静态变量相当于储存在类中的全局变量用法
类名 ::$静态变量
,静态成员可以在对象被销毁后继续保留,方便下一次调用;静态函数只能使用静态变量,类名:: 静态函数(...);
抽象类&接口
抽象类和接口是不能被实例化的特殊类。
抽象类
抽象类是不能被实例化的特殊类,只能作为其它类的父类使用。用法
abstract class 类名{
//抽象成员变量...
abstract function func1();
abstract function func2();
}
抽象类至少包含一个抽象函数;抽象函数没有函数体,只有声明(末尾加分号)其功能在子类中实现;
接口
php只支持单继承,要实现多重继承需要用到接口。
- 声明
interface 接口名{
//成员常量
//抽象函数
}
接口中不能声明变量,只能是成员常量和抽象函数所有的函数都必须在子类中实现,否则报错,接口的权限只能为public。
- 用法
class 类名 implement 接口1,接口2...{//抽象函数实现}
多态
- 通过重写父类函数实现
- 通过写不同的接口抽象函数实现
其它关键字&魔术方法
- final:用于修饰类或成员函数,修饰类表示此类为最终版本,不可再有子类;修饰成员函数表示此函数不可被重写覆盖。
- clone:用于对象克隆,
$对象名 = clone $原对象名;
- instanceof:用于检验某对象是否属于某个类
obj_name instanceof class_name