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


Posted in PHP onSeptember 28, 2016

本文实例讲述了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+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
PHP入门学习笔记之一
Oct 12 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
php实现插入排序
Mar 29 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
php实现的顺序线性表示例
May 04 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 PHP
PHP类相关知识点实例总结
Sep 28 #PHP
PHP 闭包详解及实例代码
Sep 28 #PHP
php类的自动加载操作实例详解
Sep 28 #PHP
PHP对象克隆clone用法示例
Sep 28 #PHP
PHP简单遍历对象示例
Sep 28 #PHP
PHP标准类(stdclass)用法示例
Sep 28 #PHP
PHP类型约束用法示例
Sep 28 #PHP
You might like
关于页面优化和伪静态
2009/10/11 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
商务邀请函范文
2014/01/14 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
产品促销活动策划书
2014/01/15 职场文书
毕业大学生自荐信
2014/06/17 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
银行授权委托书范本
2014/10/04 职场文书
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js