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迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
深入PHP数据缓存的使用说明
May 10 PHP
php中文字符串截取方法实例总结
Sep 30 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
CI配置多数据库访问的方法
Mar 28 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
php-fpm重启导致的程序执行中断问题详解
Apr 29 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 PHP
Laravel中如何轻松容易的输出完整的SQL语句
Jul 26 PHP
php7中停止php-fpm服务的方法详解
May 09 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错
2018/11/06 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
python中的__slots__使用示例
2015/02/26 Python
Python实现数据库编程方法详解
2015/06/09 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
Python 实现try重新执行
2019/12/21 Python
python+requests接口自动化框架的实现
2020/08/31 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
教育学习自我评价
2014/02/03 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
地质灾害防治方案
2014/05/14 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
先进集体事迹材料范文
2014/12/25 职场文书