当前位置: 首页 > 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.jsqmd.com/news/973321/

相关文章:

  • 光子电路交换技术突破分布式ML通信瓶颈
  • MATLAB处理GeoTIFF踩坑实录:从读取、显示到批量导出,一篇搞定所有地理信息问题
  • 2026年6月市面上口碑好的防腐板批发厂家推荐,阻燃型防腐板/耐候型防腐板/采光板/防腐板,防腐板源头厂家口碑推荐 - 品牌推荐师
  • IHO-3000高安版刷机实录:用TTL绕过限制,免费搞定悦ME系统
  • 多维聚合实战:从pandas groupby到银行级业务建模
  • ORAN来了,FPGA工程师的‘铁饭碗’更稳了?聊聊开放无线接入网下的硬件开发新变化
  • 当‘按钮,按钮’遇上A/B测试:如何用数据与人性设计高转化率功能
  • 股票 / 基金理财业务落地成交易系统完整方案
  • 手把手教你用‘晶体管好帮手’模块测试BC547:管脚、hFE、耐压值全搞定
  • 为什么选择杭州码尚友科技进行 App 上架?
  • 别再手动标注了!用CloudCompare的‘小剪刀’和‘加号’功能,5分钟搞定点云语义分割
  • MyBatis-Plus BaseMapper 完全指南
  • 用STM32CubeMX玩转FreeRTOS消息队列:从按键控制LED到多任务数据流实战
  • 镜头里的守护:用影视语言读懂生命医疗健康
  • 别再死记硬背了!用Python模拟RDT协议(可靠数据传输)的发送与接收状态机
  • 2026年福州物流仓储岗位SCMP班期怎么核对?众智商学院400冯老师费用资料 - 众智商学院官方
  • 用STM32F103和W5500芯片,5分钟搞定一个Modbus-TCP从站(附完整代码)
  • 从财务误差到游戏物理:IEEE754舍入模式选错,你的程序到底会出什么bug?
  • 别再傻傻分不清了!设计师必懂的PS和AI核心区别与选择指南(附实战场景)
  • 别再只看FLOPs了!ShuffleNet v2作者教你用4条黄金法则设计真正高效的移动端网络
  • 从‘旋转魔方’到‘开关电路’:手把手用Python代码验证群同构与同态
  • ASP+Flash架构的电子杂志后台生成工具(含翻页动画与管理界面)
  • MyBatis-Plus CRUD 操作实战:从踩坑到真香
  • 你的LNA真的‘安静’吗?手把手教你用频谱仪测噪声系数NF与三阶交调点IP3
  • 2026年徐州CPPM报名资料费用怎么确认?众智商学院官网400冯老师课程咨询 - 众智商学院官方
  • 跟着B站大佬复现Swin Transformer图像分类:从PyTorch代码到花卉数据集实战(附完整代码)
  • Sqribble文档操作系统:模板驱动的PDF自动化生成原理与实践
  • 在线污泥浓度计十大优选品牌深度解析——从核心技术到工程实战的全维度选型指南 - 仪表品牌榜
  • SQL与NoSQL选型指南:从ACID/BASE到CAP的工程决策逻辑
  • ESP32+LVGL实战:用ST7789和ILI9341屏幕跑个音乐播放器Demo(ESP-IDF环境)