php对象工厂类完整示例


Posted in PHP onAugust 09, 2018

本文实例讲述了php对象工厂类。分享给大家供大家参考,具体如下:

<?php
/**
 * 对象工厂
 * @author flynetcn
 */
class ObjectFactory
{
  private static $objSet = array();
  /**
   * 清空工厂中的对象
   */
  public function clear()
  {
    self::$objSet = array();
  }
  /**
   * 在工厂中创建对象并将其返回
   * 参数格式:$class_name, $class_param1, $class_param2, ...
   */
  public static function create()
  {
    $argc = func_num_args();
    if ($argc <= 0) {
      throw new Exception('params error', 1);
    }
    $args = func_get_args();
    $class_name = array_shift($args);
    $params = $args;
    if (!$params) {
      $class_sign = $class_name;
    } else {
      $param_sign = serialize($params);
      if (strlen($param_sign) > 100) {
        $param_sign = md5($param_sign);
      }
      $class_sign = $class_name.'@'.$param_sign;
    }
    if (isset(self::$objSet[$class_sign])) {
      return self::$objSet[$class_sign];
    }
    $ref = new ReflectionClass($class_name);
    if ($ref->hasMethod('__construct') && !empty($params)) {
      $obj = $ref->newInstanceArgs($params);
    } else {
      $obj = $ref->newInstance();
    }
    self::$objSet[$class_sign] = $obj;
    return $obj;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何分别全角和半角以避免乱码
Oct 09 PHP
让PHP支持断点续传的源码
May 16 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
PHP中串行化用法示例
Nov 16 PHP
微信自定义分享php代码分析
Nov 24 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 #PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 #PHP
PHP命令Command模式用法实例分析
Aug 08 #PHP
PHP耦合设计模式实例分析
Aug 08 #PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 #PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 #PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 #PHP
You might like
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
linux下编译安装memcached服务
2014/08/03 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
python得到电脑的开机时间方法
2018/10/15 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
银行实习生自我鉴定范文
2013/09/19 职场文书
国际会计专业求职信
2014/08/04 职场文书
五年级数学教学反思
2016/02/16 职场文书
python中%格式表达式实例用法
2021/06/18 Python
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js
Python学习之异常中的finally使用详解
2022/03/16 Python
Elasticsearch 索引操作和增删改查
2022/04/19 Python
小程序自定义轮播图圆点组件
2022/06/25 Javascript