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 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
分享PHP-pcntl 实现多进程代码
Sep 30 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
yii插入数据库防并发的简单代码
May 27 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 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实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
如何用php获取文件名后缀
2013/06/09 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
python支持断点续传的多线程下载示例
2014/01/16 Python
Python操作CouchDB数据库简单示例
2015/03/10 Python
详解Python中的循环语句的用法
2015/04/09 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
Python内置类型性能分析过程实例
2020/01/29 Python
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
食品业务员岗位职责
2014/03/18 职场文书
婚礼秀策划方案
2014/05/19 职场文书
文秘应届生求职信
2014/07/05 职场文书
社区务虚会发言材料
2014/10/20 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python
带你了解Java中的ForkJoin
2022/04/28 Java/Android