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中操作Excel实例代码
Apr 29 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
PHP递归实现层级树状展开
Apr 01 PHP
Yii实现简单分页的方法
Apr 29 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
php实现转换html格式为文本格式的方法
May 16 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 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
PHP制作图型计数器的例子
2006/10/09 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js获取视频时长代码
2014/04/10 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
了解JavaScript中的选择器
2019/05/24 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
35个Python编程小技巧
2014/04/01 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
物业管理求职自荐信
2013/09/25 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
参观邀请函范文
2015/02/02 职场文书
李白故里导游词
2015/02/12 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android
MySQL数据库查询之多表查询总结
2022/08/05 MySQL