Heim >Backend-Entwicklung >PHP7 >Was sind die Designmuster in PHP7.0?

Was sind die Designmuster in PHP7.0?

王林
王林Original
2023-05-26 09:21:111026Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Technologie werden Designmuster in der Softwareentwicklung immer wichtiger. Als neueste PHP-Version integriert PHP7.0 auch viele Designmuster. In diesem Artikel werden wir die Entwurfsmuster in PHP7.0 untersuchen, um PHP-Programmierern zu helfen, diese Muster besser zu verstehen und anzuwenden.

  1. Singleton-Muster

Das Singleton-Muster ist ein Erstellungsmuster, das sicherstellt, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt bereitstellt. In PHP7.0 können Sie die __construct-Methode und die statische Methode verwenden, um dieses Muster zu implementieren. Hier ist ein Beispiel:

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

Im obigen Code gibt die Methode getInstance() die einzige Instanz der Singleton-Klasse zurück.

  1. Fabrikmuster

Fabrikmuster ist ein weiteres Erstellungsmuster, das eine Schnittstelle für die Erstellung von Objekten bereitstellt, aber nur die Instanziierungslogik des Objekts offenlegt. In PHP7.0 können Sie Schnittstellen und abstrakte Klassen verwenden, um dieses Muster zu implementieren. Hier ist ein Beispiel:

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');
        }
    }
}

Im obigen Code ist die ShapeFactory-Klasse eine abstrakte Factory-Klasse und ihre create()-Methode erstellt ein Objekt basierend auf der angegebenen Kategorie und löst eine Ausnahme aus.

  1. Beobachtermuster

Das Beobachtermuster ist ein Verhaltensmuster, das es einem Objekt (Subjekt) ermöglicht, andere Objekte (Beobachter) darüber zu informieren, dass sich sein Zustand geändert hat. In PHP7.0 können Sie die Schnittstellen SplObserver und SplSubject verwenden, um dieses Muster zu implementieren. Hier ist ein Beispiel:

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;
    }
}

Im obigen Code ist die User-Klasse ein Subjekt und implementiert die SplSubject-Schnittstelle. Die Logger-Klasse ist ein Beobachter und implementiert die SplObserver-Schnittstelle.

  1. Adaptermuster

Das Adaptermuster ist ein Strukturmuster, das es vorhandenen Klassen ermöglicht, mit anderen Klassen zusammenzuarbeiten, wenn auch mit unterschiedlichen Schnittstellen. In PHP7.0 können Sie Schnittstellen und abstrakte Klassen verwenden, um dieses Muster zu implementieren. Hier ist ein Beispiel:

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);
    }
}

Im obigen Code ist DatabaseAdapterInterface die Adapterschnittstelle und MysqlAdapter die Adapterklasse.

Zusammenfassung

In diesem Artikel haben wir vier Entwurfsmuster in PHP7.0 besprochen: Singleton-Muster, Fabrikmuster, Beobachtermuster und Adaptermuster. Diese Muster sind bei der PHP-Programmierung sehr nützlich und können Programmierern dabei helfen, ihren Code besser zu entwerfen und zu organisieren. Wenn Sie diese Muster noch nicht gelernt haben, ist es jetzt an der Zeit, damit zu beginnen.

Das obige ist der detaillierte Inhalt vonWas sind die Designmuster in PHP7.0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn