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下用GD生成生成缩略图的两个选择和区别
Apr 17 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
codeigniter中测试通过的分页类示例
Apr 17 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
php图像处理类实例
Jul 28 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 PHP
php微信公众号开发之秒杀
Oct 20 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
python多线程同步之文件读写控制
2021/02/25 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
人代会标语
2014/06/30 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
机关职员工作检讨书
2014/10/23 职场文书
大学生支教感言
2015/08/01 职场文书
初一英语教学反思
2016/02/15 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server