什么是自动加载;如何使用spl_autoload,__ autoload和spl_autoload

我正在学习高级PHP标准,并尝试实现新的有用方法。之前,我__autoload只是为了避免在每个页面上包含多个文件而逃脱,但是最近我看到了一个提示__autoload manual


spl_autoload_register()为自动加载类提供了更灵活的替代方法。因此,不建议使用__autoload(),以后可能不建议使用或将其删除。


但我真的不知道如何实施spl_autoload和spl_autoload_register


翻阅古今
浏览 652回答 3
3回答

慕标5832272

spl_autoload_register() 允许您注册PHP将放入堆栈/队列中的多个函数(或您自己的Autoload类中的静态方法),并在声明“新类”时顺序调用。因此,例如:spl_autoload_register('myAutoloader');function myAutoloader($className){    $path = '/path/to/class/';    include $path.$className.'.php';}//-------------------------------------$myClass = new MyClass();在上面的示例中,“ MyClass”是您要实例化的类的名称,PHP将该名称作为字符串传递给spl_autoload_register(),从而允许您选择变量并将其用于“包含”适当的类/文件。因此,您不需要特别通过include / require语句来包含该类。就像上面的示例一样,只需简单地调用您想要实例化的类,并且由于您已经注册了spl_autoload_register()自己的函数(通过),该函数可以确定所有类的位置,因此PHP将使用该函数。使用的好处spl_autoload_register()是,与__autoload()您不同的是,您不需要在创建的每个文件中实现自动加载功能。spl_autoload_register()还可以让您注册多个自动加载功能,以加快自动加载速度并使其变得更加容易。例:spl_autoload_register('MyAutoloader::ClassLoader');spl_autoload_register('MyAutoloader::LibraryLoader');spl_autoload_register('MyAutoloader::HelperLoader');spl_autoload_register('MyAutoloader::DatabaseLoader');class MyAutoloader{    public static function ClassLoader($className)    {         //your loading logic here    }    public static function LibraryLoader($className)    {         //your loading logic here    }关于spl_autoload,手册指出:此功能旨在用作的默认实现__autoload()。如果未指定其他内容且spl_autoload_register()没有任何参数调用该函数,则此函数将用于以后对的任何调用__autoload()。实际上,如果所有文件都位于一个目录中,并且您的应用程序不仅使用.php文件,而且还使用扩展名为.inc的自定义配置文件,那么您可以使用的一种策略是添加包含所有内容的目录文件到PHP的包含路径(通过set_include_path())。而且,由于还需要配置文件,因此将用于spl_autoload_extensions()列出要PHP查找的扩展名。例:set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');spl_autoload_extensions('.php, .inc');spl_autoload_register();由于spl_autoload是__autoload()magic方法的默认实现,因此当您尝试实例化新类时,PHP将调用spl_autoload。希望这可以帮助...

Smart猫小萌

从PHP 5.3开始,您可以使用spl_autoload_register()名称空间,这意味着您可以组织项目并自动加载php类,而无需任何要求或包含,也无需重新定义__autoload()函数。为了演示这种行为,只需创建一个名为index.php的文件:<?phpspl_autoload_register();var_dump(new Main\Application);然后在index.php文件旁边创建一个名为Main的文件夹。最后,在Main中创建一个名为Application.php的文件,并将以下代码粘贴到其中:<?php namespace Main;class Application{}
打开App,查看更多内容
随时随地看视频慕课网APP