面向对象编程在PHP中

面向对象概念

面向对象编程(OOP)是一种使用“对象”来设计应用程序和软件的编程范式。这些对象是类的实例,可以包含以字段形式存在的数据,也称为属性;以及以过程形式存在的代码,也称为方法。OOP的主要原则有封装、继承和多态。

PHP - Object Oriented Programming

定义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