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 print EOF实现方法
May 21 PHP
php for 循环语句使用方法详细说明
May 09 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 PHP
php常用文件操作函数汇总
Nov 22 PHP
php实现删除空目录的方法
Mar 16 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
php中引用符号(&amp;)的使用详细介绍
Dec 06 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
php封装的page分页类完整实例代码
Feb 01 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
一个显示天气预报的程序
2006/10/09 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
JS 时间显示效果代码
2009/08/23 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
javascript基本类型详解
2014/11/28 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
Python实现的异步代理爬虫及代理池
2017/03/17 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
python的Jenkins接口调用方式
2020/05/12 Python
Python requests接口测试实现代码
2020/09/08 Python
详解python中的异常和文件读写
2021/01/03 Python
电子商务应届生自我鉴定
2014/01/13 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
论文评审意见
2015/06/05 职场文书
讲座新闻稿
2015/07/18 职场文书