php面向对象实现
PHP 面向对象编程基础
面向对象编程(OOP)是一种编程范式,PHP 从版本 5 开始全面支持 OOP。核心概念包括类、对象、属性、方法、继承、封装和多态。
类与对象的定义
类是对现实事物的抽象,对象是类的实例。定义一个类使用 class 关键字:
class Person {
// 属性
public $name;
private $age;
// 方法
public function sayHello() {
echo "Hello, my name is " . $this->name;
}
}
创建对象使用 new 关键字:
$person = new Person();
$person->name = "John";
$person->sayHello();
访问修饰符
PHP 支持三种访问修饰符:
public:在任何地方可访问protected:在类内部和子类中可访问private:仅在类内部可访问
构造函数与析构函数
构造函数在对象创建时自动调用,析构函数在对象销毁时自动调用:
class Person {
public function __construct($name) {
$this->name = $name;
}
public function __destruct() {
echo "Object destroyed";
}
}
继承
子类可以继承父类的属性和方法:
class Student extends Person {
public $studentId;
public function showId() {
echo "Student ID: " . $this->studentId;
}
}
方法重写
子类可以重写父类的方法:
class Student extends Person {
public function sayHello() {
parent::sayHello(); // 调用父类方法
echo " I'm a student";
}
}
静态属性和方法
静态成员属于类而非对象:
class Math {
public static $pi = 3.14;
public static function square($n) {
return $n * $n;
}
}
echo Math::$pi;
echo Math::square(5);
接口
接口定义了一组方法的契约:
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
file_put_contents('log.txt', $message);
}
}
抽象类
抽象类不能被实例化,只能被继承:
abstract class Animal {
abstract public function makeSound();
public function eat() {
echo "Eating...";
}
}
命名空间
命名空间解决类名冲突问题:
namespace MyProject;
class MyClass {
// 类定义
}
// 使用
$obj = new \MyProject\MyClass();
自动加载
使用 spl_autoload_register 实现类自动加载:
spl_autoload_register(function ($class) {
include $class . '.php';
});
魔术方法
PHP 提供了一系列魔术方法:
class Magic {
public function __get($name) {
echo "Getting $name";
}
public function __set($name, $value) {
echo "Setting $name to $value";
}
public function __call($name, $arguments) {
echo "Calling $name with " . implode(', ', $arguments);
}
}
面向对象设计原则
- 单一职责原则:一个类只负责一项职责
- 开放封闭原则:对扩展开放,对修改封闭
- 里氏替换原则:子类可以替换父类
- 接口隔离原则:客户端不应依赖它不需要的接口
- 依赖倒置原则:依赖抽象而非具体实现
常用设计模式
- 工厂模式:创建对象的接口,让子类决定实例化哪个类
- 单例模式:确保一个类只有一个实例
- 观察者模式:定义对象间的一对多依赖关系
- 策略模式:定义算法族,分别封装起来,使它们可以互相替换
最佳实践
- 遵循 PSR 标准(PHP Standard Recommendations)
- 使用类型声明和返回类型声明(PHP 7+)
- 合理使用组合而非继承
- 保持类的小而专注
- 为类和方法添加文档注释
现代 PHP 特性
PHP 7+ 新增了许多面向对象特性:
-
类型声明:
class Calculator { public function add(int $a, int $b): int { return $a + $b; } } -
匿名类:
$obj = new class { public function hello() { echo "Hello"; } }; -
空合并运算符:
$name = $user->getName() ?? 'Anonymous'; -
太空船运算符:
usort($array, function($a, $b) { return $a <=> $b; });







