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 相关文章推荐
php5 and xml示例
Nov 22 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
使用python爬取B站千万级数据
2018/06/08 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
使用python-Jenkins批量创建及修改jobs操作
2020/05/12 Python
Python中如何引入第三方模块
2020/05/27 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
编码实现字符串转整型的函数
2012/06/02 面试题
人力资源管理专业应届生求职信
2013/09/28 职场文书
绿化工程实施方案
2014/03/17 职场文书
土木工程求职信
2014/05/29 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
复活读书笔记
2015/06/29 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android