当前位置: 首页 > news >正文

PHP面向对象SOLID原则

PHP面向对象SOLID原则

SOLID是面向对象设计的五个基本原则。遵循这些原则可以让代码更容易维护和扩展。今天说说SOLID原则在PHP中的应用。

单一职责原则。一个类应该只有一个职责。

```php
// 违反SRP
class User
{
public function save(): void {}
public function sendEmail(): void {}
public function generateReport(): void {}
}

// 遵循SRP
class UserRepository
{
public function save(User $user): void {}
}

class EmailService
{
public function send(User $user, string $message): void {}
}

class ReportGenerator
{
public function generate(array $data): string {}
}
?>

开放封闭原则。对扩展开放,对修改关闭。

```php
interface PaymentMethod
{
public function pay(float $amount): array;
}

class Alipay implements PaymentMethod
{
public function pay(float $amount): array
{
return ['channel' => 'alipay', 'status' => 'success'];
}
}

class Wechat implements PaymentMethod
{
public function pay(float $amount): array
{
return ['channel' => 'wechat', 'status' => 'success'];
}
}

// 新增支付方式不需要修改现有代码
class PaymentService
{
public function process(PaymentMethod $payment, float $amount): array
{
return $payment->pay($amount);
}
}
?>

里氏替换原则。子类应该可以替换父类。

```php
abstract class Bird
{
abstract public function move(): string;
}

class Sparrow extends Bird
{
public function move(): string { return '飞'; }
}

class Penguin extends Bird
{
public function move(): string { return '走'; }
}

function makeBirdMove(Bird $bird): string
{
return $bird->move();
}

echo makeBirdMove(new Sparrow()) . "\n";
echo makeBirdMove(new Penguin()) . "\n";
?>

接口隔离原则。客户端不应该依赖它不需要的接口。

```php
interface Workable
{
public function work(): void;
}

interface Eatable
{
public function eat(): void;
}

class HumanWorker implements Workable, Eatable
{
public function work(): void {}
public function eat(): void {}
}

class RobotWorker implements Workable
{
public function work(): void {}
}
?>

依赖反转原则。依赖抽象而不是具体实现。

```php
interface Storage
{
public function save(string $data): void;
}

class FileStorage implements Storage
{
public function save(string $data): void
{
file_put_contents('/tmp/data.txt', $data);
}
}

class DatabaseStorage implements Storage
{
public function save(string $data): void
{
// 存储到数据库
}
}

class DataManager
{
public function __construct(private Storage $storage) {}

public function save(string $data): void
{
$this->storage->save($data);
}
}

$manager = new DataManager(new FileStorage());
$manager->save('数据');
?>

SOLID原则是面向对象设计的指导方针。遵循这些原则可以让代码更容易维护、测试和扩展。但也不需要过度设计,在简单的场景中强行套用原则反而会增加复杂度。

http://www.zskr.cn/news/1485048.html

相关文章:

  • 光子电路交换技术突破分布式ML通信瓶颈
  • 股票 / 基金理财业务落地成交易系统完整方案
  • 用STM32F103和W5500芯片,5分钟搞定一个Modbus-TCP从站(附完整代码)
  • 2026年福州物流仓储岗位SCMP班期怎么核对?众智商学院400冯老师费用资料 - 众智商学院官方
  • 别再死记硬背了!用Python模拟RDT协议(可靠数据传输)的发送与接收状态机
  • 跟着B站大佬复现Swin Transformer图像分类:从PyTorch代码到花卉数据集实战(附完整代码)
  • 别再只看FLOPs了!ShuffleNet v2作者教你用4条黄金法则设计真正高效的移动端网络
  • Sqribble文档操作系统:模板驱动的PDF自动化生成原理与实践
  • 在线污泥浓度计十大优选品牌深度解析——从核心技术到工程实战的全维度选型指南 - 仪表品牌榜
  • ESP32+LVGL实战:用ST7789和ILI9341屏幕跑个音乐播放器Demo(ESP-IDF环境)
  • 炉石传说HsMod插件终极指南:55项隐藏功能全面解锁
  • Gemini CLI:终端原生的免费AI编程助手
  • MyBatis-Plus IService 封装完全指南
  • VS Code 数据科学协作工程化:从 Notebook 到可复现团队工作流
  • 拆解一个Type-C扩展坞:看PS176芯片如何实现4K 60Hz视频转换
  • VMware解锁工具深度解析:3步实现macOS虚拟机跨平台运行
  • 3D-LLM:大语言模型原生理解三维空间与工程制造
  • Django REST项目一键生成OpenAPI 3文档的轻量级工具,支持装饰器精细标注与多场景扩展
  • 保姆级教程:在威联通NAS上用Docker搞定qBittorrent到Transmission的自动转种与辅种
  • 前端直接生成带格式Excel:字体、行列宽、合并单元格全搞定
  • Swing应用动态换肤怎么玩?基于FlatLaf实现用户自定义主题切换(含圆角、颜色自定义)
  • MyBatis-Plus Mapper 扫描完全指南
  • engGNN双图神经网络在阿尔茨海默病基因分析中的应用
  • 嵌入式网络调试避坑实录:W5500驱动集成中SPI片选(CS)与中断的那些‘坑’
  • 联盛德W806驱动ST7567液晶屏避坑指南:硬件SPI配置、内存偏移处理与对比度调校
  • C++特殊类设计(详细介绍)
  • 2026年众智商学院中级经济师上班族晚间班期费用资料怎么核对?官网400冯老师 - 众智商学院官方
  • MATLAB实现GNSS+IMU组合导航仿真:EKF融合算法全流程可运行代码包
  • 央视连发三条专题!济南AI模型工厂:75道工序流水线量产,一年“造“出1000+模型
  • 从自动驾驶到电机控制:聊聊卡尔曼滤波这位‘跨界大神’的降维应用