>  기사  >  백엔드 개발  >  PHP7.0의 디자인 패턴은 무엇입니까?

PHP7.0의 디자인 패턴은 무엇입니까?

王林
王林원래의
2023-05-26 09:21:111014검색

지속적인 기술 발전으로 인해 소프트웨어 개발에서 디자인 패턴이 점점 더 중요해지고 있습니다. 최신 PHP 버전인 PHP7.0에는 다양한 디자인 패턴도 통합되어 있습니다. 이 기사에서는 PHP 프로그래머가 이러한 패턴을 더 잘 이해하고 적용할 수 있도록 PHP7.0의 디자인 패턴을 살펴보겠습니다.

  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. Factory Pattern

Factory 패턴은 객체 생성을 위한 인터페이스를 제공하지만 객체의 인스턴스화 논리만 노출하는 또 다른 생성 패턴입니다. 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. 관찰자 패턴

관찰자 패턴은 하나의 객체(주체)가 자신의 상태가 변경되었음을 다른 객체(관찰자)에게 알릴 수 있는 행동 패턴입니다. 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의 네 가지 디자인 패턴인 싱글톤 패턴, 팩토리 패턴, 관찰자 ​​패턴 및 어댑터 패턴에 대해 논의했습니다. 이러한 패턴은 PHP 프로그래밍에 매우 유용하며 프로그래머가 코드를 더 잘 디자인하고 구성하는 데 도움이 될 수 있습니다. 아직 이러한 패턴을 배우지 않았다면 지금이 시작할 때입니다.

위 내용은 PHP7.0의 디자인 패턴은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.