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 4.2书写安全的脚本
Oct 09 PHP
Php注入点构造代码
Jun 14 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
php创建sprite
Feb 11 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
PHP中“=&gt;
Mar 01 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 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查询域名状态whois的类
2006/11/25 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Unicode和Python的中文处理
2017/03/19 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
工会主席事迹材料
2014/06/03 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
民事纠纷协议书
2016/03/23 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
导游词之云南丽江古城
2019/09/17 职场文书