文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

“PHP 面向对象编程设计模式:理解 SOLID 原则及其应用”

2024-02-25 08:11

关注

SOLID 原则是面向对象编程设计模式中的一组指导原则,旨在提高软件设计的质量和可维护性。由罗伯特·马丁(Robert C. Martin)提出,SOLID 原则包括:

  1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只负责一项任务,并且这个任务应该被封装在类中。这样可以提高类的可维护性和可复用性。
class User {
  private $id;
  private $name;
  private $email;

  public function __construct($id, $name, $email) {
    $this->id = $id;
    $this->name = $name;
    $this->email = $email;
  }

  public function getId() {
    return $this->id;
  }

  public function getName() {
    return $this->name;
  }

  public function getEmail() {
    return $this->email;
  }
}

class UserRepository {
  private $connection;

  public function __construct($connection) {
    $this->connection = $connection;
  }

  public function save(User $user) {
    $stmt = $this->connection->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
    $stmt->execute([$user->getName(), $user->getEmail()]);
  }

  public function find($id) {
    $stmt = $this->connection->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([$id]);
    $result = $stmt->fetch();

    if ($result) {
      return new User($result["id"], $result["name"], $result["email"]);
    }

    return null;
  }
}
  1. 开放-封闭原则(Open-Closed Principle,OCP):软件实体(类、模块等)应该对扩展开放,对修改关闭。这样可以提高软件的灵活性,降低软件维护成本。
interface Shape {
  public function getArea();
}

class Rectangle implements Shape {
  private $width;
  private $height;

  public function __construct($width, $height) {
    $this->width = $width;
    $this->height = $height;
  }

  public function getArea() {
    return $this->width * $this->height;
  }
}

class Circle implements Shape {
  private $radius;

  public function __construct($radius) {
    $this->radius = $radius;
  }

  public function getArea() {
    return pi() * $this->radius ** 2;
  }
}

class ShapeCalculator {
  public function calculateTotalArea($shapes) {
    $totalArea = 0;
    foreach ($shapes as $shape) {
      $totalArea += $shape->getArea();
    }

    return $totalArea;
  }
}
  1. 里氏替换原则(Liskov Substitution Principle,LSP):子类可以替换其父类而不会影响程序的正确性。这样可以提高软件的灵活性,使软件更容易重构。
class Animal {
  public function eat() {
    echo "Animal is eating.";
  }
}

class Dog extends Animal {
  public function bark() {
    echo "Dog is barking.";
  }
}

class Cat extends Animal {
  public function meow() {
    echo "Cat is meowing.";
  }
}

function feedAnimal(Animal $animal) {
  $animal->eat();
}

feedAnimal(new Dog()); // prints "Dog is eating."
feedAnimal(new Cat()); // prints "Cat is eating."
  1. 接口隔离原则(Interface Segregation Principle,ISP):应该使用多个专门的接口,而不是一个通用的接口。这样可以提高软件的可读性,降低软件维护成本。

interface Printable {
  public function print();
}

interface Scannable {
  public function scan();
}

interface Faxable {
  public function fax();
}

class Printer implements Printable {
  public function print() {
    echo "Printer is printing.";
  }
}

class Scanner implements Scannable {
  public function scan() {
    echo "Scanner is scanning.";
  }
}

class FaxMachine implements Faxable {
  public function fax() {
    echo "Fax machine is faxing.";
  }
}

class MultifunctionDevice implements Printable, Scannable, Faxable {
  public function print() {
    echo "Multifunction device is printing.";
  }

  public function scan() {
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯