PHP 8의 디자인 패턴: 대체 구현
5701 단어 oopwebdevphpprogramming
에서는 상속을 사용하여 디자인 패턴 Singleton 및 Multiton을 구현하는 예를 보여주었습니다. 문자 그대로 여러 메서드를 구현하고 이러한 메서드가 호출되는 모든 위치에서 단일 인스턴스가 필요한 프로젝트에 몇 개의 간단한 클래스가 있는 경우 이는 상당히 편리한 접근 방식입니다.
php 언어는 단일 상속만 허용하며 이것이 지난 기사의 변형이 우리 애플리케이션의 아키텍처를 복잡하게 만들거나 심지어 깨뜨리는 이유일 수 있습니다. 따라서 패턴 구현을 위한 다른 옵션을 고려할 것을 제안합니다.
종종 올바른 솔루션은 템플릿을 필요로 하는 모든 클래스에서 템플릿을 구현하는 것입니다.
class Database
{
private static self|null $instance = null;
final private function __construct(){}
final private function __clone(){}
final private function __wakeup(){}
public static function getInstance(): self
{
if (self::$instance === null) {
self::$instance = new self;
}
return self::$instance;
}
public function connect()
{
// ...
}
}
$db = Database::getInstance();
$db->connect();
대안은 특성을 사용하는 것입니다. 이 옵션은 프로젝트에 여러 클래스가 있고 DRY 원칙을 준수하기 위해 반복되는 코드의 일부를 제거하려는 경우에 적합합니다.
trait MultitonTrait
{
private static array|null $instance = null;
public static function getInstance(int|string $key): self
{
if (!array_key_exists($key, self::$instance)) {
self::$instance[$key] = new self;
}
return self::$instance[$key];
}
}
class Database
{
use MultitonTrait;
final private function __construct(){}
final private function __clone(){}
final private function __wakeup(){}
public function connect()
{
// ...
}
}
$db = Database::getInstance('mysql');
$db->connect();
이 기사와 이전 기사의 모든 옵션에는 장단점이 있으므로 특정 프로젝트의 아키텍처를 기반으로 최상의 솔루션을 선택해야 합니다.
Reference
이 문제에 관하여(PHP 8의 디자인 패턴: 대체 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zhukmax/design-patterns-in-php-8-alternative-implementations-4egj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)