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的知识
Nov 17 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
May 07 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
基于jquery的cookie的用法
2011/01/10 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
使用python实现strcmp函数功能示例
2014/03/25 Python
python之yield表达式学习
2014/09/02 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python 图片去噪的方法示例
2019/07/09 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
Python类继承和多态原理解析
2020/02/05 Python
python3实现简单飞机大战
2020/11/29 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
经理秘书找工作求职信
2013/12/19 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
班主任班级寄语大全
2014/04/04 职场文书
房屋出租协议书
2014/04/10 职场文书
推荐信模板
2014/05/09 职场文书
入职担保书范文
2014/05/21 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis