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 相关文章推荐
PHP配置心得包含MYSQL5乱码解决
Nov 20 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
PHP clearstatcache()函数详解
Mar 02 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
一个PHP二维数组排序的函数分享
Jan 17 PHP
php发送post请求函数分享
Mar 06 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
laravel-admin的图片删除实例
Sep 30 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
基于mysql的bbs设计(四)
2006/10/09 PHP
测试您的 PHP 水平的题目
2007/05/30 PHP
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
php压缩文件夹最新版
2018/07/18 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
模仿password输入框的实现代码
2016/06/07 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
面包屑导航详解
2017/12/07 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
python3操作mysql数据库的方法
2017/06/23 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
大学生职业生涯设计书
2014/01/02 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
音乐研修感悟
2015/11/18 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android