hallex / design_patterns
使用 PHP 设计模式将设计模式导入您的项目
dev-master
2020-06-02 02:47 UTC
Requires
- php: >=7.4
This package is auto-updated.
Last update: 2024-09-29 05:29:44 UTC
README
描述
PHP 设计模式存储库(推荐 PHP 7.4)
测试的 PHP 版本
PHP => 7.4
添加的设计模式
如何使用
链接:点击 这里 前往文档(即将推出)
指南
安装
composer require hallex/design-patterns ^1.0
设计模式
观察者
<?php //Configure your autoload directory require_once __DIR__ . '/vendor/autoload.php' use DesignPatterns\Observer\Subject; use DesignPatterns\Observer\Observer; //Overwrite Methods Observer final class MyObserver implements SplObserver { //Import Observer use Observer; //Poliform Method Update public function update(SplSubject $subject) : void { echo 'Poliform' . PHP_EOL; } } //Overwrite Methods Observer final class MySubject implements SplSubject { //Import Subject use Subject; final public function attach(SplObserver $observer) : SplSubject { $this->observers->attach($observer); return $this; } final public function detach(SplObserver $observer) : SplSubject { $this->observers->detach($observer); return $this; } final public function notify() : void { foreach ($this->observers as $observer) { $observer->update($this); } } } //Import Subject Methods in your class $subject = new class implements SplSubject { use Subject; }; //Import Observers Methods in your class $observer = new class implements SplObserver { use Observer; }; //My Objects Subject and Observer $mySubject = new MySubject; $myObserver = new MyObserver; //Callback normal $mySubject->attach($observer); $mySubject->attach($myObserver); $mySubject->detach($myObserver); //Fluency Interface $subject ->attach($observer) ->attach($myObserver) ->detach($observer); //Notify All Observer $subject->notify(); $mySubject->notify(); //Debug of Subjects var_dump($subject); var_dump($mySubject);
调试
//Debug Varible "$subject" object(class@anonymous)[3] private SplObjectStorage 'observers' => object(SplObjectStorage)[2] private 'storage' => array (size=1) '000000002b33b19f0000000058b0c727' => array (size=2) //Debug Varible "$mySubject" object(MySubject)[5] private SplObjectStorage 'observers' => object(SplObjectStorage)[6] private 'storage' => array (size=1) '000000002b33b19c0000000058b0c727' => array (size=2)
单例
<?php require_once __DIR__ . '/../../vendor/autoload.php'; use DesignPatterns\Singleton\PDO\Singleton as PDOSingleton; use DesignPatterns\Singleton\Singleton as SingletonMethod; use DesignPatterns\Interfaces\Singleton\SingletonContract; use DesignPatterns\Interfaces\Singleton\PDO\SingletonContract as PDOSingletonContract; class Singleton implements SingletonContract { use SingletonMethod; /** * It possible make overwrite of method instance() * or property $instance */ } class NotSingleton { } class Connection implements PDOSingletonContract { use PDOSingleton; public static function connect() : PDO { return new PDO( 'mysql:host=localhost;dbname=SOME_DATABASE', 'root', '' ); } }
调试
$singleton = new Singleton;//Fatal Error $singleton1 = Singleton::instance();//Single Instance $singleton2 = Singleton::instance();//Single Instance identicalObjects($singleton1, $singleton2);//true - It is a single intance $notSingleton1 = new NotSingleton;//new Instance $notSingleton2 = new NotSingleton;//new Instance identicalObjects($notSingleton1, $notSingleton2);//failed - It is not a single instance $connection = new Connection;//Fatal Error $connection1 = Connection::instance();//Single Instance $connection2 = Connection::instance();//Single Instance identicalObjects($connection1, $connection2);//true - It is a single instance of PDO