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 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
PHP 输出URL的快捷方式示例代码
Sep 22 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 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变量引用的面试题
2010/08/08 PHP
PHP运行模式的深入理解
2013/06/03 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
js中有关IE版本检测
2012/01/04 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
javascript实现商品图片放大镜
2019/11/28 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
Java分治归并排序算法实例详解
2017/12/12 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
客服工作职责
2013/12/11 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
高中生毕业评语
2014/12/30 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python