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生成图形验证码几种方法小结
Aug 15 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
PHP文件缓存类示例分享
Jan 30 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 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 什么是PEAR?(第三篇)
2009/03/19 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
如何快速上手Vuex
2017/02/14 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
移动web开发之touch事件实例详解
2018/01/17 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
深入解析Python中的上下文管理器
2016/06/28 Python
python去除字符串中的换行符
2017/10/11 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
董事长职责范文
2013/11/08 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
优化Mysql查询的示例
2022/04/26 MySQL