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 相关文章推荐
在smarty模板中使用PHP函数的方法
Apr 23 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
php mysql实现mysql_select_db选择数据库
Dec 30 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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,ajax实现分页
2008/03/27 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
Python批量转换文件编码格式
2015/05/17 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python3实现字符串操作的实例代码
2019/04/16 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
Django和Flask框架优缺点对比
2019/10/24 Python
pytorch数据预处理错误的解决
2020/02/20 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
生态养殖创业计划书
2014/05/06 职场文书
自强之星事迹材料
2014/05/12 职场文书
工程售后服务承诺书
2014/05/21 职场文书
公务员诚信承诺书
2014/05/26 职场文书
校庆标语集锦
2014/06/25 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
产品质量保证书范本
2015/02/27 职场文书
2015年幼师工作总结
2015/04/28 职场文书
诉讼和解协议书
2016/03/23 职场文书