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 相关文章推荐
用Zend Encode编写开发PHP程序
Feb 21 PHP
url decode problem 解决方法
Dec 26 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
php发送与接收流文件的方法
Feb 11 PHP
PHP比较运算符的详细介绍
Sep 29 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
详解PHP处理密码的几种方式
Nov 30 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 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学习之正则表达式
2011/04/17 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
学习ExtJS form布局
2009/10/08 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
Python将多份excel表格整理成一份表格
2018/01/03 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
python logging模块的使用
2020/09/07 Python
采购部经理岗位职责
2014/02/10 职场文书
致100米运动员广播稿
2014/02/14 职场文书
政风行风评议心得体会
2014/10/21 职场文书
个人事迹材料范文
2014/12/29 职场文书
高中生毕业评语
2014/12/30 职场文书
《颐和园》教学反思
2016/02/19 职场文书
golang中的struct操作
2021/11/11 Golang