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实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
关于php mvc开发模式的感想
Jun 28 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
php实现的一个简单json rpc框架实例
Mar 30 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
PHP概率计算函数汇总
Sep 13 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
Laravel学习基础之migrate的使用教程
Oct 11 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 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实现微信公众号验证Token的示例代码
2019/12/16 PHP
告诉大家什么是JSON
2008/06/10 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
Python使用剪切板的方法
2017/06/06 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
python文本数据相似度的度量
2018/03/12 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
Python语法分析之字符串格式化
2019/06/13 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
音乐学个人的自荐书范文
2013/11/26 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
亮化工程实施方案
2014/03/17 职场文书
家长会演讲稿
2014/04/26 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
课程设计的心得体会
2014/09/03 职场文书
婚前协议书标准版
2014/10/19 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
试用期自我评价范文
2015/03/10 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
MySQL Server 层四个日志
2022/03/31 MySQL
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers