php教程自学网 - 轻松零基础学php视频教程
条幅广告
当前位置: 主页 > 原生PHP >

PHP AutoLoad 自动加载机制分析实践

时间:2018-08-22 15:06来源:未知 作者:admin 点击:
autoload 自动加载机制可以减少不必要的文件包含,从而一定程度上提高PHP网站的运行性能。本文就简单介绍一下PHP中autoload自动加载机制的原理及使用方法。 __autoload的使用方法1 最经常

 autoload 自动加载机制可以减少不必要的文件包含,从而一定程度上提高PHP网站的运行性能。本文就简单介绍一下PHP中autoload自动加载机制的原理及使用方法。

  __autoload的使用方法1

  最经常使用的就是这种方法,根据类名,找出类文件,然后require_one

  function __autoload($class_name) { $path = str_replace('_', '/', $class_name); require_once $path . '.php'; } // 这里会自动加载Http/File/Interface.php 文件 $a = new Http_File_Interface();

  这种方法的好处就是简单易使用。当然也有缺点,缺点就是将类名和文件路径强制做了约定,当修改文件结构的时候,就势必要修改类名。

  __autoload的使用方法2(直接映射法)

  $map = array( 'Http_File_Interface' => 'C:/PHP/HTTP/FILE/Interface.php' ); function __autoload($class_name) { if (isset($map[$class_name])) { require_once $map[$class_name]; } } // 这里会自动加载C:/PHP/HTTP/FILE/Interface.php 文件 $a = new Http_File_Interface();

  这种方法的好处就是类名和文件路径只是用一个映射来维护,所以当文件结构改变的时候,不需要修改类名,只需要将映射中对应的项修改就好了。

  这种方法相较于前面的方法缺点是当文件多了的时候这个映射维护起来非常麻烦,或许这时候你就会考虑使用json或者单独一个文件来进行维护了。或许你会想到使用一个框架来维护或者建立这么一个映射。

  spl_autoload

  __autoload的最大缺陷是无法有多个autoload方法

  好了, 想下下面的这个情景,你的项目引用了别人的一个项目,你的项目中有一个__autoload,别人的项目也有一个__autoload,这样两个__autoload就冲突了。解决的办法就是修改__autoload成为一个,这无疑是非常繁琐的。

  因此我们急需使用一个autoload调用堆栈,这样spl的autoload系列函数就出现了。你可以使用spl_autoload_register注册多个自定义的autoload函数

  如果你的PHP版本大于5.1的话,你就可以使用spl_autoload

  先了解spl的几个函数:

  spl_autoload 是_autoload()的默认实现,它会去include_path中寻找$class_name(.php/.inc)

  Spl_autoload实现自动加载:

  /*http.php*/ callname();

  Spl_autoload_register

  将函数注册到SPL __autoload函数栈中,直接看一个例子:

  /*http.php*/ callname();

  spl_autoload_call

  调用spl_autoload_register中注册的调用函数, 看下面的例子

  /*http.php*/ callname(); //这个时候会输出"this is http2"

  spl_auto_register这个函数使得我们不使用__autoload,使用自定义的函数来进行自动加载成为可能。这个方法现在是经常使用到的。

  Zend的AutoLoader模块就使用了这个方法。摘录其中对应的代码

  spl_autoload_register(array(__CLASS__, 'autoload')); public static function autoload($class) { ….. }

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关推荐
  • php常用原生函数
  • 1.in_array 判断一个值是否在这个数组中 例: $arr = array(apple,banana); if(in_array(app

  • 原生php文件上传
  • html端: form action=check.php method=post enctype=multipart/form-data input type=hidden name=MAX_F

  • 什么是PHP Trait
  • 如果你是一个PHP新手,或者你是一个资深的PHP程序员,你可能听说过Trait,但是

  • 如何通过​PHP创建数据库
  • 数据库是相互关联的数据的集合,我们可以从数据库中有效地检索,插入和删除

  • PHP array_reduce()函数的应用解析
  • 实例 向用户自定义函数发送数组中的值,并返回一个字符串: ?php function myfu

  • php图片裁剪函数
  • /* * 图片裁剪工具 * 将指定文件裁剪成正方形 * 以中心为起始向四周裁剪 * @pa

  • PHP文件格式
  • PHP是编程语言,必须经过服务器解释才能才浏览器上浏览的一种文件。php文件是

  • PHP冒泡排序算法
  • 今天开始弄点面试题,一来巩固所学的PHP知识,二来对某些正在找工作的人也许

  • 原生php实现文件上传方法
  • 用tp的框架上传文件,方便是方便了,但是知其然而不知其所以然。 想要知其所

  • 自己编写php框架的核心
  • 大部分的Web框架处理以下事情: 代码重用:定义包、类、函数的放置和加载规