search
HomeBackend DevelopmentPHP Tutorialphp 3种基本设计模式的组合使用

1.1 工厂模式,工厂方法或者类生成对象,而不是在代码直接new

    class Factory{              static function getDatabase(){            return new Mysql($host, $user, $pass);        }    }    #使用    Factory::getDatabase();

1.2 单例模式,使某个类的对象仅运行创建一个

  • 1.有个私有的静态对象变量,专门存放本类的对象
  • 2.有个静态的方法来创建对象
  • 3.有个私有的构造函数,防止外部new对象
  • 4.有个clone方法,防止clone return false
    参考文章单例模式
  • class Database {      //单一对象属性     private static $instance;      //定义一些全局变量需要存放属性     private $props = array();      //私有的构造方法     private function __construct(){          echo 'into construct! 该类不允许外部创建对象 ';      }      //返回单一实例     public static function getInstance () {          //判断是否已经有了实例化的对象         if(empty(self::$instance)) {              //可以被override (动态解析)             self::$instance = new static();              //不可以被override (静态解析)             //self::$instance = new self();         }          return self::$instance;      }      public function __clone(){        return '该类禁止clone';    }    //设置属性     public function setProperty ( $key, $value) {          $this->props[$key] = $value;      }      //获取属性     public function getPeoperty ( $key ) {          return $this->props[$key];      }  }  //使用 $dbObj = Database::getInstance();  $dbObj->setProperty('root_path','/www');  $dbObj->setProperty('tmp_path','/tmp');  //接下来删除该单例对象,如果还能获取到刚刚添加的属性,说明使用的是同一个对象 unset($dbObj);  $dbObj = Database::getInstance();  echo $dbObj->getPeoperty('root_path');  echo $dbObj->getPeoperty('tmp_path');  

    1.3 注册模式,全局共享和交换对象

  • 1.将同一个需要多次使用对象统一注册添加别名,统一调用使用, (比如客户买一个机器肯定是去工厂认定的机构去买,而不是每个人都去工厂去买)
  • 2.当下一次想使用一个对象的时候,不需要使用工厂,也不需要使用单例模式,直接在注册器上获取就可以了
  •     class Register (){        protected static $objects;        function set($alias, $object){            self::$objects[$alias] = $objects;        }        function get($alias){            return self::$objects[$alias];        }        function _unset($alias){            unset(self::$objects[$alias]);        }    }

    2.总结使用

        class Factory{              static function getDatabase(){            //单例模式获取数据对象            $dbObj = Database::getInstance();            //注册到全局树上            Register::set('db1', $dbObj);        }    }    #使用    //第一次主文件里面    Factory::getDatabase();    //以后使用数据库对象直接访问    Register::get('db1');

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    Statement
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Working with Flash Session Data in LaravelWorking with Flash Session Data in LaravelMar 12, 2025 pm 05:08 PM

    Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

    cURL in PHP: How to Use the PHP cURL Extension in REST APIscURL in PHP: How to Use the PHP cURL Extension in REST APIsMar 14, 2025 am 11:42 AM

    The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

    Simplified HTTP Response Mocking in Laravel TestsSimplified HTTP Response Mocking in Laravel TestsMar 12, 2025 pm 05:09 PM

    Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

    PHP Logging: Best Practices for PHP Log AnalysisPHP Logging: Best Practices for PHP Log AnalysisMar 10, 2025 pm 02:32 PM

    PHP logging is essential for monitoring and debugging web applications, as well as capturing critical events, errors, and runtime behavior. It provides valuable insights into system performance, helps identify issues, and supports faster troubleshoot

    12 Best PHP Chat Scripts on CodeCanyon12 Best PHP Chat Scripts on CodeCanyonMar 13, 2025 pm 12:08 PM

    Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

    Explain the concept of late static binding in PHP.Explain the concept of late static binding in PHP.Mar 21, 2025 pm 01:33 PM

    Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

    Customizing/Extending Frameworks: How to add custom functionality.Customizing/Extending Frameworks: How to add custom functionality.Mar 28, 2025 pm 05:12 PM

    The article discusses adding custom functionality to frameworks, focusing on understanding architecture, identifying extension points, and best practices for integration and debugging.

    See all articles

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    AI Hentai Generator

    AI Hentai Generator

    Generate AI Hentai for free.

    Hot Article

    R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
    3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Best Graphic Settings
    3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. How to Fix Audio if You Can't Hear Anyone
    3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

    Hot Tools

    EditPlus Chinese cracked version

    EditPlus Chinese cracked version

    Small size, syntax highlighting, does not support code prompt function

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    Powerful PHP integrated development environment

    VSCode Windows 64-bit Download

    VSCode Windows 64-bit Download

    A free and powerful IDE editor launched by Microsoft

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    Dreamweaver Mac version

    Dreamweaver Mac version

    Visual web development tools