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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
php中的时间显示
Jan 18 PHP
PHP 错误之引号中使用变量
May 04 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 PHP
php调用shell的方法
Nov 05 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 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中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Python datetime 如何处理时区信息
2020/09/02 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
Unix如何添加新的用户
2014/08/20 面试题
内业资料员岗位职责
2014/01/04 职场文书
人力资源作业细则
2014/03/03 职场文书
个人更名证明
2015/06/23 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
我收到了德劲DE1107
2022/04/05 无线电