欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > php >内容正文

php

php的autoload自动加载机制使用说明 -凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 php 18 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 php的autoload自动加载机制使用说明 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2019独角兽企业重金招聘python工程师标准>>>

在php开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件bao含进来,但是这样可能会使得在引用文件的新脚本中,存在大量的include或require方法调用,如果一时疏忽遗漏则会产生错误,使得代码难以维护。 自php5后,引入了__autoload这个拦截器方法,可以自动对class文件进行bao含引用,通常我们会这么写:

function __autoload($classname) { include_once $classname . '.class.php'; } $user = new user();

当php引擎试图实例化一个未知类的操作时,会调用__autoload()方法,在php出错失败前有了最后一个机会加载所需的类。因此,上面的这段代码执行时,php引擎实际上替我们自动执行了一次__autoload方法,将user.class.php这个文件bao含进来。 在__autoload函数中抛出的异常不能被catch语句块捕获并导致致命错误。 如果使用 php的cli交互模式时,自动加载机制将不会执行。 当你希望使用pear风格的命名规则,例如需要引入user/register.php文件,也可以这么实现:

//加载我 function __autoload($classname) { $file = str_replace('_', directory_separator, $classname); include_once $file . 'php'; } $userregister = new user_register();

这种方法虽然方便,但是在一个大型应用中如果引入多个类库的时候,可能会因为不同类库的autoload机制而产生一些莫名其妙的问题。在php5引入spl标准库后,我们又多了一种新的凯发ag旗舰厅登录网址下载的解决方案,spl_autoload_register()函数。 此 函数的功能就是把函数注册至spl的__autoload函数栈中,并移除系统默认的__autoload()函数。一旦调用 spl_autoload_register()函数,当调用未定义类时,系统会按顺序调用注册到spl_autoload_register()函数的所有函数,而不是自动调用__autoload()函数,下例调用的是user/register.php而不是 user_register.class.php:

//不加载我 function __autoload($classname) { include_once $classname . '.class.php'; } //加载我 function autoload($classname) { $file = str_replace('/', directory_separator, $classname); include_once $file . '.php'; } //开始加载 spl_autoload_register('autoload'); $userregister = new user_register();

在使用spl_autoload_register()的时候,我们还可以考虑采用一种更安全的初始化调用方法,参考如下:

//系统默认__autoload函数 function __autoload($classname) { include_once $classname . '.class.php'; } //可供spl加载的__autoload函数 function autoload($classname) { $file = str_replace('_', directory_separator, $classname); include_once $file . '.php'; } //不小心加载错了函数名,同时又把默认__autoload机制给取消了……囧 spl_autoload_register('_autoload', false); //容错机制 if(false === spl_autoload_functions()) { if(function_exists('__autoload')) { spl_autoload_register('__autoload', false); } }


转载于:https://my.oschina.net/u/1186749/blog/662850

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的php的autoload自动加载机制使用说明的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

网站地图