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 采集书并合成txt格式的实现代码
Mar 01 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
Jun 05 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
Jun 29 PHP
帝国cms常用标签汇总
Jul 06 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
PHP中TP5 上传文件的实例详解
Jul 31 PHP
PHP PDOStatement::execute讲解
Jan 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
jquery replace方法去空格
2017/05/08 jQuery
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
python实现simhash算法实例
2014/04/25 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
python代码实现ID3决策树算法
2017/12/20 Python
python实现自动发送报警监控邮件
2018/06/21 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
numpy.random模块用法总结
2019/05/27 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
python从PDF中提取数据的示例
2020/10/30 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
校园安全演讲稿
2014/05/09 职场文书
施工工地安全标语
2014/06/07 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
长城导游词400字
2015/01/30 职场文书
现场施工员岗位职责
2015/04/11 职场文书
单身证明格式样本
2015/06/15 职场文书