PHP常用设计模式

  设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。在PHP中,常用的设计模式有许多,以下是一些常见的设计模式:

  1. 单例模式(Singleton Pattern)

  确保一个类只有一个实例,并提供全局访问点。

class Singleton {
    private static $instance;

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

  2. 工厂模式(Factory Pattern)

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。

interface Shape {
    public function draw();
}

class Circle implements Shape {
    public function draw() {
        echo "Draw a Circle";
    }
}

class Square implements Shape {
    public function draw() {
        echo "Draw a Square";
    }
}

class ShapeFactory {
    public function getShape($type) {
        switch ($type) {
            case 'circle':
                return new Circle();
            case 'square':
                return new Square();
            default:
                return null;
        }
    }
}

  3. 观察者模式(Observer Pattern)

  定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

interface Observer {
    public function update($message);
}

class ConcreteObserver implements Observer {
    public function update($message) {
        echo "Received message: $message";
    }
}

class Subject {
    private $observers = [];

    public function addObserver(Observer $observer) {
        $this->observers[] = $observer;
    }

    public function notifyObservers($message) {
        foreach ($this->observers as $observer) {
            $observer->update($message);
        }
    }
}

  4. 策略模式(Strategy Pattern)

  定义一系列的算法,把它们封装起来,并使它们可以相互替换。

interface PaymentStrategy {
    public function pay($amount);
}

class CreditCardPayment implements PaymentStrategy {
    public function pay($amount) {
        echo "Paid $amount via Credit Card";
    }
}

class PayPalPayment implements PaymentStrategy {
    public function pay($amount) {
        echo "Paid $amount via PayPal";
    }
}

class ShoppingCart {
    private $paymentStrategy;

    public function setPaymentStrategy(PaymentStrategy $paymentStrategy) {
        $this->paymentStrategy = $paymentStrategy;
    }

    public function checkout($amount) {
        $this->paymentStrategy->pay($amount);
    }
}

  5. 装饰器模式(Decorator Pattern)

  动态地给一个对象添加一些额外的职责。

interface Coffee {
    public function cost();
}

class SimpleCoffee implements Coffee {
    public function cost() {
        return 5;
    }
}

class MilkDecorator implements Coffee {
    private $coffee;

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

    public function cost() {
        return $this->coffee->cost() + 2;
    }
}

  这只是几个PHP中常见的设计模式,设计模式是一种通用的解决问题的思想,根据实际需求选择合适的设计模式来提高代码的可维护性和可扩展性。

本站原创内容,如需转载请注明来源:https://www.liutonghui.com/62.html

上一篇 2014-02-17
下一篇 2014-07-27

评论列表(0条)

  • 暂时没有评论!

发表评论

captcha

相关推荐

  • PHP实现APP微信支付的实例讲解

      一、PHP后台后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付!   官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1   根据文档拼接微信需要的参数,这里需要几个方法,直接上代码!   1.传输给微信的参数要组装成xml格式发送,传入参数数组! public function ToXml($data=array()) ......

    2018-08-31
    18670
  • PHP实现相关文章推荐功能

      实现相关文章推荐功能通常需要使用更高级的推荐系统算法,对于查询到的相关文章,需要计算它们与当前文章的相似度。相似度可以根据文章的内容、标题、标签等属性进行计算。可以使用文本相似度算法(如余弦相似度、Jaccard相似度等)或基于内容的推荐算法来计算相似度。   假设有一个包含文章信息的数据库表 articles: CREATE TABLE articles ( id INT PRIMARY KEY, title VA......

    2021-05-24
    13250
  • 再谈PHP错误与异常处理

      请一定要注意,没有特殊说明:本例 PHP Version < 7   说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php <?php $num = 0; try { echo 1/$num; } catch (Exception $e){ ......

    2017-06-12
    13770
  • PHP正则表达式提取字符串中的链接

      在 PHP 中可以使用正则表达式来提取字符串中的链接。以下是一个简单的例子,演示如何使用正则表达式来获取内容中所有的链接: <?php // 要匹配的 HTML 内容 $htmlContent = '<p>这是一段包含链接的文本:<a href="https://www.example.com">Example 1</a>, <a href="https://www.example2.......

    2015-08-20
    18630
  • PHP封装数据库操作Model类示例

      数据库操作是产品开发中最常见的需求,封装一个PHP数据库操作Model类可以减少反复的写大量SQL语句,下面就为大家分享一个数据库操作Model类。 <?php //引入配置文件 include "./config.php"; class Model { public $link;//存储连接对象 public $tableName = "";//存储表名 public $field =......

    2019-06-12
    15454
  • HTML5新手入门指南

      HTML5是HTML的最新版本,引入了一系列新的元素、属性和API,使得开发者可以创建更强大、更交互性的Web页面。以下是HTML5新手入门指南的一些建议:   1. 基础结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="......

    2015-02-18
    18340
  • PHP实现获取农历(阴历)、节日、节气的类与用法示例

      本文实例讲述了php实现获取农历(阴历)、节日、节气的类与用法。分享给大家供大家参考,具体如下: <?php /* * 农历 节气 节日 */ header("Content-Type:text/html;charset=utf-8"); class Lunar { var $MIN_YEAR = 1891; var $MAX_YEAR = 2100; var $lunarInfo = array( arr......

    2018-03-07
    18370
  • PHP实现多语言支持的方法

      在PHP中实现多语言支持的常见方法是使用语言文件和一个语言管理器来处理不同语言的文本翻译。以下是一个简单的多语言示例,使用PHP实现基本的国际化和本地化:   创建语言文件   首先,创建一个目录用于存储语言文件。每种语言都有一个对应的文件,其中包含键值对,用于将文本翻译为该语言。   例如,创建一个 languages 目录,其中包含英语(en.php)和法语(fr.php)的语言文件:   en.php: <?php re......

    2022-01-29
    5150