ホームページ >バックエンド開発 >PHP7 >PHP7.0のデザインパターンとは何ですか?

PHP7.0のデザインパターンとは何ですか?

王林
王林オリジナル
2023-05-26 09:21:111025ブラウズ

テクノロジーの継続的な発展に伴い、ソフトウェア開発におけるデザインパターンの重要性がますます高まっています。 PHP の最新バージョンである PHP7.0 には、多くのデザインパターンも統合されています。この記事では、PHP プログラマーがこれらのパターンをよりよく理解し、適用できるように、PHP7.0 のデザイン パターンについて説明します。

  1. シングルトン パターン

シングルトン パターンは、クラスがインスタンスを 1 つだけ持ち、グローバル アクセス ポイントを提供することを保証する作成パターンです。 PHP7.0 では、__construct メソッドと静的メソッドを使用してこのパターンを実装できます。以下に例を示します。

class Singleton
{
    private static $instance = null;
    
    private function __construct() {}
    
    public static function getInstance()
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }
        
        return static::$instance;
    }
}

上記のコードでは、getInstance() メソッドは Singleton クラスの唯一のインスタンスを返します。

  1. ファクトリ パターン

ファクトリ パターンは別の作成パターンであり、オブジェクトを作成するためのインターフェイスを提供しますが、オブジェクトのインスタンス化ロジックのみを公開します。 PHP7.0 では、インターフェイスと抽象クラスを使用してこのパターンを実装できます。以下に例を示します。

interface ShapeInterface
{
    public function draw();
}

class Rectangle implements ShapeInterface
{
    public function draw()
    {
        // 画一个矩形
    }
}

class Square implements ShapeInterface
{
    public function draw()
    {
        // 画一个正方形
    }
}

abstract class ShapeFactory
{
    public static function create($type)
    {
        switch ($type) {
            case 'rectangle':
                return new Rectangle();
            case 'square':
                return new Square();
            default:
                throw new Exception('Invalid shape type');
        }
    }
}

上記のコードでは、ShapeFactory クラスは抽象ファクトリ クラスであり、その create() メソッドは指定されたカテゴリに基づいてオブジェクトを作成し、例外をスローします。

  1. Observer パターン

Observer パターンは、1 つのオブジェクト (サブジェクト) がその状態が変化したことを他のオブジェクト (オブザーバー) に通知できるようにする動作パターンです。 PHP7.0 では、SplObserver インターフェイスと SplSubject インターフェイスを使用してこのパターンを実装できます。以下に例を示します。

class User implements SplSubject
{
    private $name;
    private $observers;

    public function __construct($name)
    {
        $this->name = $name;
        $this->observers = new SplObjectStorage();
    }

    public function attach(SplObserver $observer)
    {
        $this->observers->attach($observer);
    }

    public function detach(SplObserver $observer)
    {
        $this->observers->detach($observer);
    }

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

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

    public function setName($name)
    {
        $this->name = $name;
        $this->notify();
    }
}

class Logger implements SplObserver
{
    public function update(SplSubject $subject)
    {
        echo 'User "' . $subject->getName() . '" has been updated.' . PHP_EOL;
    }
}

上記のコードでは、User クラスがサブジェクトであり、SplSubject インターフェイスを実装しています。 Logger クラスはオブザーバーであり、SplObserver インターフェイスを実装します。

  1. アダプター パターン

アダプター パターンは、既存のクラスが他のクラスと連携できるようにする構造パターンです (これらのクラスのインターフェイスは異なります)。 PHP7.0 では、インターフェイスと抽象クラスを使用してこのパターンを実装できます。以下に例を示します。

interface DatabaseInterface
{
    public function connect($host, $username, $password, $database);
    public function query($sql);
}

class MysqlDatabase implements DatabaseInterface
{
    protected $connection;

    public function connect($host, $username, $password, $database)
    {
        $this->connection = mysqli_connect($host, $username, $password, $database);
    }

    public function query($sql)
    {
        return mysqli_query($this->connection, $sql);
    }
}

interface DatabaseAdapterInterface
{
    public function query($sql);
}

class MysqlAdapter implements DatabaseAdapterInterface
{
    protected $mysql;

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

    public function query($sql)
    {
        return $this->mysql->query($sql);
    }
}

上記のコードでは、DatabaseAdapterInterface がアダプター インターフェイスであり、MysqlAdapter がアダプター クラスです。

概要

この記事では、PHP7.0 の 4 つの設計パターン (シングルトン パターン、ファクトリー パターン、オブザーバー パターン、アダプター パターン) について説明しました。これらのパターンは PHP プログラミングで非常に役立ち、プログラマーがコードをより適切に設計および整理するのに役立ちます。これらのパターンをまだ学習していない場合は、今が始める時期です。

以上がPHP7.0のデザインパターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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