类和对象的介绍
见Java学习笔记(二)类和对象,编程思想不管在哪门语言都是一样的。
类的基本操作
类的声明
- 声明格式
<?php 权限修饰符 class 类名{ 类的内容; } ?>
- 常见的修饰符包括public、private、protected,作用和Java类似, 不过PHP默认修饰符是public(省略修饰符的时候)
成员属性
- 成员属性即在类中声明的变量
- 声明格式
public class Student{ public $name; }
- 成员属性必须使用修饰符,包括public、private、protected等,如果没有特定的意义,仍然需要使用var关键词修饰。另外,在声明类的成员属性时,不可以进行赋值操作
成员方法
- 成员方法即在类中声明的函数
- 声明格式
class Student{ public $name; function GetIp{ //多行代码 } }
类的实例化
- 语法:
$变量名=new 类名称([参数]);
访问类中的成员属性和方法
- 访问类中的成员属性和方法,需要使用运算符“->”
- 语法:
$变量名= new 类名称(); $变量名 -> 成员属性= 值; $变量名 -> 成员方法
- 还可以使用以下特殊方法
$this
:存在于类中的每一个成员方法中。它是一个特殊的对象引用方法。成员方法属于哪个对象,$this引用就代表哪个对象,主要作用是专门完成对象内部成员之间的访问- 操作符“::”:可以在没有任何声明实例的情况下访问类中的成员
- 语法格式:
关键字:: 变量名/常量名/方法名
- 关键字主要包括3种。
- parent:表示可以调用父类中的成员变量、常量和成员方法
- self:表示可以调用当前类中的常量和静态成员
- 类名:表示可以调用本类中的常量、变量和方法
- 语法格式:
构造方法和析构方法
构造方法存在于每个声明的类中,主要作用是执行一些初始化任务。如果类中没有声明构造方法,那么会默认的生成一个没有参数且内存为空的构造方法
声明格式(PHP5之后,之前的不做介绍)
function __construct([mixed args]){
//方法的内容
}
析构方法:对象被销毁的时候调用执行的,但是因为PHP在每个请求的最终都会把所有的资源释放,所以析构方法的意义是有限的
function __destruct(){
//方法的内容
}
- PHP具有辣鸡回收机制,可以自动清除不再使用的对象,析构方法是在辣鸡回收程序前被调用的方法,是PHP编程中的可选内容
- 不过,析构方法在某些特定行为中还是有用的,比如在对象被销毁时清空资源或者记录日志信息
- 这两种情况下,析构方法可能被调用执行
- 代码运行时,当都所有的对于某个对象的reference(引用)被毁掉的情况下
- 当代码执行到最终,并且PHP停止请求的时候
访问器
这是一个很好用的方法(accessor),称为访问器。由于OOP思想并不鼓励直接从类内部访问类的属性,以强调封装,所以可以使用__get和__set方法来达到此目的。无论何时,类属性被访问和操作时,访问方法都会被激发,通过使用它们,可以避免直接对类属性的访问
类的继承
继承(Inheritance)是OOP中最为重要的特性和概念。父类拥有其子类的公共属性和方法。子类还拥有自己独特的属性和方法
语法格式
class 子类名称 extends 父类名称{
//子类成员变量列表
function 成员方法(){
//方法内容
}
}
抽象类和接口
抽象类和接口都是特殊的类,它们不能被实例化
抽象类
- 抽象类只能作为父类使用,使用abstract关键字类声明
- 语法格式
abstract class 抽象类名称{ //抽象类的成员变量列表 abstract function 成员方法1(参数); abstract function 成员方法2(参数); }
- 抽象类与普通类的区别在于,抽象类的方法没有方法内容,而且至少包含一个抽象方法。另外,抽象方法也必须使用关键字abstract来修饰,而且抽象方法后必须有分号
接口
- 继承特性简化了对象、类的创建,增加了代码的可重用性。但是PHP只支持单继承,如果想实现多继承,就需要使用接口
- 接口类通过关键字interface来声明。接口中不能实现声明变量,只能使用关键字const声明为常量的成员属性。接口中声明的方法必须是抽象方法,并且接口中所有的成员都必须是public的访问权限
- 语法格式
interface 接口名称{ //常量成员 //抽象方法 }
- 与继承使用extends关键字不同的 是,实现接口使用的是implements关键字
- class 实现的接口名 implements 接口名称
- 实现接口的类必须实现接口中声明的所有方法,除非这个类被声明为抽象类
面向对象的多态性
多态性是指同一操作作用于不同类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果
实现多态的方法
- 通过接口实现多态
- 通过继承实现多态
匿名类(PHP7)
即没有名称的类,只有在创建时用new语句类声明它们,PHP7支持通过new class来实例化一个匿名类。
感谢大佬分享,非常有用