面向对象编程在PHP中
面向对象概念
面向对象编程(OOP)是一种使用“对象”来设计应用程序和软件的编程范式。这些对象是类的实例,可以包含以字段形式存在的数据,也称为属性;以及以过程形式存在的代码,也称为方法。OOP的主要原则有封装、继承和多态。
定义PHP类
在PHP中,您使用class
关键字来定义一个类。一个类是创建对象的蓝图。它定义了一组属性和方法,这些属性和方法对于某一类型的所有对象是通用的。
class Car {
// 类属性和方法放在这里
}
在PHP中创建对象
要从类创建一个对象,您使用new
关键字,后面跟类名。
$myCar = new Car();
调用成员函数
成员函数在类中定义,用于对对象的属性执行操作。您使用对象运算符->
在对象上调用成员函数。
$myCar->drive(); // 在$myCar对象上调用drive方法
构造函数
构造函数是一个特殊的方法,当从类创建对象时会自动调用。它用于初始化对象的属性。
class Car {
public function __construct() {
// 在这里初始化属性
}
}
析构函数
析构函数是一个特殊的方法,当对象被销毁或超出作用域时会自动调用。它用于执行清理任务,如关闭数据库连接或释放内存。
class Car {
public function __destruct() {
// 在这里执行清理任务
}
}
继承
继承允许一个类从另一个类继承属性和方法。被继承的类称为父类,继承的类称为子类。
class ElectricCar extends Car {
// ElectricCar从Car继承属性和方法
}
函数重写
函数重写允许子类提供一个与父类中已经定义的方法不同的实现。
class ElectricCar extends Car {
public function drive() {
// drive方法的另一种实现
}
}
公共成员
公共成员可以从任何地方访问,包括类内部和外部。
class Car {
public $color; // 公共属性
public function drive() { // 公共方法
// 代码放在这里
}
}
私有成员
私有成员只能在定义它们的类内部访问。它们不能从类外部访问。
class Car {
private $color; // 私有属性
private function drive() { // 私有方法
// 代码放在这里
}
}
受保护的成员
受保护的成员在定义它们的类内部以及任何子类中都可以访问。
class Car {
protected $color; // 受保护的属性
protected function drive() { // 受保护的方法
// 代码放在这里
}
}
接口
接口是一个定义了类必须实现的方法集的合同。如果一个类实现了接口,它承诺为接口中声明的方法提供实现。
interface Drivable {
public function drive(); // 方法声明
}
class Car implements Drivable {
public function drive() {
// drive方法的实现
}
}
常量
常量是定义后不能更改的命名值。它们对于在程序执行期间不应更改的值的定义非常有用。
class Car {
const MAX_SPEED = 100; // 常量值
}
抽象类
抽象类是不能实例化的类,旨在被其他类扩展。它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。
abstract class Vehicle {
abstract public function move(); // 抽象方法
public function stop() { // 具体方法
// 代码放在这里
}
}
静态关键字
静态关键字用于声明属性或方法属于类本身,而不是类的实例。静态成员可以在不创建类对象的情况下访问。
class Car {
public static $count = 0; // 静态属性
public static function getCount() { // 静态方法
return self::$count;
}
}
final关键字
final关键字用于防止类被扩展,或方法被重写。
final class Car {
// 这个类不能被扩展
}
调用父构造函数
当创建子类时,您可能希望调用父类的构造函数来初始化其某些属性。您可以使用parent
关键字,后跟::
运算符和构造函数名称来实现。
class ElectricCar extends Car {
public function __construct() {
parent::__construct(); // 调用父构造函数
// 在这里进行额外的初始化
}
}
Credits: Image by storyset