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 相关文章推荐
php5中类的学习
Mar 28 PHP
PHP 读取文件的正确方法
Apr 29 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
详解PHP实现执行定时任务
Dec 21 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
php字符串的替换,分割和连接方法
May 23 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
浅谈PHP进程管理
Mar 08 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 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
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
python3实现磁盘空间监控
2018/06/21 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Python通过文本和图片生成词云图
2020/05/21 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
公共事业管理本科生求职信
2013/10/07 职场文书
节能减排倡议书
2014/04/15 职场文书
新学期标语
2014/06/30 职场文书
办理收楼委托书范本
2014/10/09 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS