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 has encountered an Access Violation
Jan 15 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 PHP
php截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 PHP
phpstudy隐藏index.php的方法
Sep 21 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下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
php强制下载类型的实现代码
2011/04/21 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
Python实现包含min函数的栈
2016/04/29 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
python区块及区块链的开发详解
2019/07/03 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
揠苗助长教学反思
2014/02/04 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
环保建议书
2014/03/12 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
委托书的样本
2015/01/28 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
js 数组 fill() 填充方法
2021/11/02 Javascript