PHP Class Autoload 的几种方法

xiaoxiao2021-02-28  13

我们在写代码的时候经常会用到类的自动加载,下面我就总结了php中类的自动加载的方法。 1.使用__autoload函数 比如我想加载/usr/local/lib/目录下的类

function __autoload($className) { $path = '/usr/local/lib/'; $file = $path.$className.'php'; require_once $file; }

上面的这种写法其实比较原始,因为我们在__autoload函数里面规定了类的目录($path).更优雅的一个方法是使用get_include_path和set_include_path这两个函数。get_include_path返回__autoload函数的目录。而set_include_path重新设定__autoload函数的目录。 __autoload 函数的原理很简单,就是定义某一个类的目录,当我们new一个类时,php自动去这个目录加载以这个类名为文件名的php文件(这里要求文件名与类名必须一致);

2.使用spl spl 是 standard php library的缩写。它是php为开发者提供的一些通用的接口,类的统称,在spl里面有几个函数是与autoload相关的

(1)spl_autoload_register 将自定义的一个autoload函数加入到系统的autoload队列里面。这个可能有 点绕。这么说吧,我们假如自定义了两个函数

function myAutoloadOne($className) { $path = '/usr/local/lib/test1/'; $file = $path.$className.'php'; require_once $file; } function myAutoloadTwo($className) { $path = '/usr/local/lib/test2/'; $file = $path.$className.'php'; require_once $file; }

我们可以分别调用spl_autoload_register(myAutoloadOne),spl_autoload_register(myAutoloadTwo)把两个文件夹的类(test1和test2)都加到系统的autoload队列里面。 (2)有了步骤(1)中的注册还不够,我们还需要一个函数来实现自动记载,这个函数就是spl_autoload();但是这个函数他只自动加载系统autoload队列里面的 __autoload函数。 加入我们定义了三个自动加载函数 __autolaod,myAutoloadOne,myAutoloadTwo. 然后分别依次调用spl_autoload_register将myAutoloadOne,myAutoloadTwo加入队列(__autoload函数不需要,可以理解为只要我们定义了这个函数,php就会自动把它加入到队列中)。这是队列当中就有三个函数了。当我们使用spl_autoload函数自动加载时,他只会加载myAutoloadTwo函数中定义的目录中的类。这是因为myAutoloadTwo是最后一个加入队列的。spl_autoload会加载最后一个用户手动通spl_autoload_register加载的目录,如果用户手动没有加载目录,那么spl_autoload会加载__autolaod的目录; 那么我想加载所有队列中的函数怎么办?请使用spl_autoload_call函数。

写到这里不知道会不会让其他人迷惑,其实大家只要知道spl会把自动加载函数放到一个队列里面。然后调用spl_autoload或者spl_autoload_call两个函数来实现自动加载。spl_autoload函数只会加载用户手动通过spl_autoload_register注册到队列当中的函数,如果没有就自动自动加载__autoload。下面是我在文档的截图:

可以看到spl_autoload的默认实现就是__autoload(); spl_autoload_call()则不同。他会实现所有队列当中的函数。

更多内容请查看官方文档

转载请注明原文地址: https://www.6miu.com/read-1399989.html

最新回复(0)