ホームページ  >  記事  >  バックエンド開発  >  PHPのデザインパターンを実践的に詳しく解説

PHPのデザインパターンを実践的に詳しく解説

PHPz
PHPzオリジナル
2024-05-07 13:57:01437ブラウズ

設計パターンは、ソフトウェア設計に実証済みのソリューションを提供し、一般的なプログラミングの問題を解決します。この記事では、PHP の一般的なデザイン パターンを詳しく調べ、シングルトン パターン、ファクトリ メソッド パターン、オブザーバー パターンをカバーする実践的なケースを通じて説明します。

PHP 设计模式实战详解

PHP デザイン パターンの実践的な詳細な説明

デザイン パターンは、一般的なプログラミングの問題を解決するソフトウェア デザインの実証済みのソリューションのセットを提供します。この記事では、PHP で一般的に使用されるデザイン パターンを詳しく掘り下げ、実際のケースを通して説明します。

シングルトン パターン

シングルトン パターンは、クラスが 1 回だけインスタンス化されることを保証します。これは、グローバル リソースまたは構成マネージャーに役立ちます。

class Database {
  private static ?\PDO $instance = null;

  private function __construct() {}

  public static function getInstance(): \PDO {
    if (self::$instance === null) {
      self::$instance = new \PDO('mysql:host=localhost;dbname=my_db', 'user', 'password');
    }

    return self::$instance;
  }
}

// 使用 Singleton
$db1 = Database::getInstance();
$db2 = Database::getInstance();

// 两个变量指向同一个 PDO 对象
var_dump($db1 === $db2); // true

ファクトリ メソッド パターン

ファクトリ メソッド パターンは、オブジェクトを作成するインターフェイスを定義しますが、サブクラスが作成プロセスを変更できるようにします。これにより、作成ロジックと製品クラスを分離する柔軟な方法が提供されます。

interface Shape {
  public function draw(): void;
}

class Circle implements Shape {
  public function draw(): void {
    echo 'Drawing a circle.' . PHP_EOL;
  }
}

class Square implements Shape {
  public function draw(): void {
    echo 'Drawing a square.' . PHP_EOL;
  }
}

class ShapeFactory {
  public static function createShape(string $type): Shape {
    switch ($type) {
      case 'circle':
        return new Circle();
      case 'square':
        return new Square();
      default:
        throw new InvalidArgumentException('Invalid shape type.');
    }
  }
}

// 使用工厂方法
$circle = ShapeFactory::createShape('circle');
$square = ShapeFactory::createShape('square');

$circle->draw(); // Drawing a circle.
$square->draw(); // Drawing a square.

Observer パターン

Observer パターンは、1 つのオブジェクト (サブジェクト) が複数のオブジェクト (オブザーバー) に状態の変化を通知できる、1 対多の依存関係を定義します。

りー

以上がPHPのデザインパターンを実践的に詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。