PHP设计模式之工厂模式与单例模式

阅读次数:1542 次  |  发布时间:2019-02-04T00:00:00Z 

本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法。分享给大家供大家参考,具体如下:

设计模式简单说应对某类问题而设计的解决方式

**工厂模式:**应对需求创建相应的对象


    class factory{
      function __construct($name){
        if(file_exists('./'.$name.'.class.php')){
          return new $name;
        }else{
          die('not exist');
        }
      }
    }
    
    

**单例模式:**只创建一个对象的实例,不允许再创建实例,节约资源(例如数据库的连接)


    class instance{
      public $val = 10;
      private static $instance ;
      private function __construct(){}
      private function __clone(){}
      //设置为静态方法才可被类调用
      public static function getInstance(){
        /*if(!isset(self::$instance)){
          self::$instance = new self;
        }*/
        if(!isset(instance::$instance)){
          instance::$instance = new self;
        }
        return instance::$instance;
      }
    }
    $obj_one = instance::getInstance();
    $obj_one->val = 20;
    //clone可以调用__clone()克隆即new出一个新的的对象
    //$obj_two = clone $obj_one;
    $obj_two = instance::getInstance();
    echo $obj_two->val;
    echo '<p>';
    var_dump($obj_one,$obj_two);
    
    

运行结果如下:


    20
    object(instance)[1]
     public 'val' => int 20
    object(instance)[1]
     public 'val' => int 20
    
    

应用:数据库连接类(database access oject)


    class mysqldb{
      private $arr = array(
        'port' => 3306,
        'host' => 'localhost',
        'username' => 'root',
        'passward' => 'root',
        'dbname' => 'instance',
        'charset' => 'utf8'
         );
      private $link;
      static $instance;
      private function __clone(){}
      private function __construct(){
        $this->link = mysql_connect($this->arr['host'],$this->arr['username'],$this->arr['passward']) or die(mysql_error());
        mysql_select_db($this->arr['dbname']) or die('db error');
        mysql_set_charset($this->arr['charset']);
      }
      static public function getInsance(){
        if(!isset(mysqldb::$instance)){
          mysqldb::$instance = new self;
        }
        return mysqldb::$instance;
      }
      public function query($sql){
        if($res = mysql_query($sql)){
          return $res;
        }return false;
      }
      //fetch one
      public function get_one($sql){
        $res = $this->query($sql);
        if($result = mysql_fetch_row($res)){
          return $result[0];
        }
      }
      //fetch row
      public function get_row($sql){
        $res = $this->query($sql);
        if($result = mysql_fetch_assoc($res)){
          return $result;
        }
        return false;
      }
      //fetch all
      public function get_all($sql){
        $res = $this->query($sql);
        $arr = array();
        while($result = mysql_fetch_assoc($res)){
          $arr[] = $result;
        }
        return $arr;
      }
    }
    $mysql = mysqldb::getInsance();
    
    

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

最近发布的代码:

获取php时间戳 PHP 程序  |  9次阅读  | 发布于:2020-08-01T23:05:19Z
php获取tempfile路径 PHP 程序  |  9次阅读  | 发布于:2020-08-01T23:03:16Z
php 1,1,2,3,5,8,13,21,34...求第30位的数是多少? PHP 程序  |  12次阅读  | 发布于:2020-08-01T23:03:00Z
PHP执行shell PHP 程序  |  22次阅读  | 发布于:2020-02-08T16:48:28Z
PHP获取HTTP body内容 PHP 程序  |  53次阅读  | 发布于:2019-12-09T14:35:47Z
php读取目录下的所有文件 PHP 程序  |  59次阅读  | 发布于:2019-11-18T18:50:49Z
php判断是爬虫在访问还是用户浏览器在访问 PHP 程序  |  62次阅读  | 发布于:2019-11-12T19:16:47Z
PHP通过UserAgent识别爬虫 PHP 程序  |  49次阅读  | 发布于:2019-11-12T19:16:03Z
PHP使用curl发起post请求 PHP 程序  |  61次阅读  | 发布于:2019-11-10T21:43:33Z
PHP版HelloWorld PHP 程序  |  47次阅读  | 发布于:2019-10-31T00:14:24Z
实现水仙花数的5个示例 PHP 程序  |  83次阅读  | 发布于:2019-10-29T23:22:58Z
PHP输出所有位数的水仙花 PHP 程序  |  41次阅读  | 发布于:2019-10-28T08:44:36Z
PHP水仙花数实现代码 PHP 程序  |  45次阅读  | 发布于:2019-10-28T08:38:23Z
根据文件后缀判断是否为代码文件 PHP 程序  |  82次阅读  | 发布于:2019-10-20T14:39:03Z
PHP判断访问者是否为手机 PHP 程序  |  78次阅读  | 发布于:2019-10-20T14:37:38Z
PHP判断字符是否以xxx开头 PHP 程序  |  74次阅读  | 发布于:2019-10-10T01:55:24Z
PHP压缩文件 PHP 程序  |  100次阅读  | 发布于:2019-10-10T01:53:17Z
PHP解压文件 PHP 程序  |  44次阅读  | 发布于:2019-10-10T01:51:36Z
PHP生成随机字符串 PHP 程序  |  55次阅读  | 发布于:2019-10-10T01:49:40Z
PHP判断路径是否合法,不能有./ ../等安全隐患 PHP 程序  |  97次阅读  | 发布于:2019-10-10T01:48:56Z
PHP在服务端通过浏览器的User-Agent判断网页的客户端类型 PHP 程序  |  76次阅读  | 发布于:2019-10-10T01:26:15Z
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态 PHP 程序  |  1123次阅读  | 发布于:2019-02-04T00:00:00Z
WordPress的主题编写中获取头部模板和底部模板 PHP 程序  |  1085次阅读  | 发布于:2019-02-04T00:00:00Z
PHP实现批量清空删除指定文件夹所有内容的方法 PHP 程序  |  1041次阅读  | 发布于:2019-02-04T00:00:00Z
PHP面向对象继承用法详解(优化与减少代码重复) PHP 程序  |  989次阅读  | 发布于:2019-02-04T00:00:00Z
玩转虚拟域名◎+ . PHP 程序  |  909次阅读  | 发布于:2019-02-04T00:00:00Z
值得分享的php+ajax实时聊天室 PHP 程序  |  937次阅读  | 发布于:2019-02-04T00:00:00Z
PHP中使用substr()截取字符串出现中文乱码问题该怎么办 PHP 程序  |  934次阅读  | 发布于:2019-02-04T00:00:00Z
模仿OSO的论坛(二) PHP 程序  |  854次阅读  | 发布于:2019-02-04T00:00:00Z
sqlyog 中文乱码问题的设置方法 PHP 程序  |  859次阅读  | 发布于:2019-02-04T00:00:00Z

最多阅读的代码

 PHP分页显示制作详细讲解 PHP 程序  |  2118次阅读
 在Zeus Web Server中安装PHP语言支持 PHP 程序  |  1660次阅读
 再谈PHP中单双引号的区别详解 PHP 程序  |  1621次阅读
 PHP实现简单爬虫的方法 PHP 程序  |  1571次阅读
 php+ajax+json 详解及实例代码 PHP 程序  |  1568次阅读
 桌面中心(一)创建数据库 PHP 程序  |  1543次阅读
 PHP设计模式之工厂模式与单例模式 PHP 程序  |  1542次阅读
 php封装的page分页类完整实例 PHP 程序  |  1542次阅读
 php数组合并array_merge()函数使用注意事项 PHP 程序  |  1536次阅读
 Yii2汉字转拼音类的实例代码 PHP 程序  |  1514次阅读
 使用WAMP搭建PHP本地开发环境 PHP 程序  |  1384次阅读
 redirect_uri参数错误的解决方法(必看) PHP 程序  |  1372次阅读
 php查询及多条件查询 PHP 程序  |  1370次阅读
 thinkPHP5.0框架简单配置作用域的方法 PHP 程序  |  1370次阅读
 php连接oracle数据库的方法(测试成功) PHP 程序  |  1342次阅读
 Zend Framework分发器用法示例 PHP 程序  |  1342次阅读
 PHP实现根据银行卡号判断银行 PHP 程序  |  1340次阅读
 PHP Header用于页面跳转时的几个注意事项 PHP 程序  |  1330次阅读
 PHP 生成的XML以FLASH获取为乱码终极解决 PHP 程序  |  1325次阅读
 php封装一个异常的处理类 PHP 程序  |  1325次阅读
 ThinkPHP3.1新特性之Action参数绑定 PHP 程序  |  1321次阅读
 mantis安装、配置和使用中的问题小结 PHP 程序  |  1321次阅读
 PHP环境搭建最新方法 PHP 程序  |  1314次阅读