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设计模式中的工厂模式
Jun 12 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
Jul 10 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
php实现简单加入购物车功能
Mar 07 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php计算十二星座的函数代码
2012/08/21 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
学习php开源项目的源码指南
2014/12/21 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
关于js datetime的那点事
2011/11/15 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python延时操作实现方法示例
2018/08/14 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
高中生的自我评价
2014/03/04 职场文书
高二学生评语大全
2014/04/25 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
2014年法院工作总结
2014/11/24 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
欢送会主持词
2015/07/01 职场文书
办公室日常管理制度
2015/08/04 职场文书
2016年教师新年寄语
2015/08/18 职场文书
logback 实现给变量指定默认值
2021/08/30 Java/Android