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 相关文章推荐
基于initPHP的框架介绍
Apr 18 PHP
php对称加密算法示例
May 07 PHP
php多个文件及图片上传实例详解
Nov 10 PHP
php微信支付之APP支付方法
Mar 04 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 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新手上路(十四)
2006/10/09 PHP
php新建文件自动编号的思路与实现
2011/06/27 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
javascript编写简易计算器
2017/05/06 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
python中列表元素连接方法join用法实例
2015/04/07 Python
Python实现控制台输入密码的方法
2015/05/29 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python的多重继承的理解
2017/08/06 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
详解python内置模块urllib
2020/09/09 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
上海微创软件面试题
2012/06/14 面试题
外贸业务员求职信范文
2013/12/12 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Java实现二分搜索树的示例代码
2022/03/17 Java/Android