为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
翻阅古今 2019-10-23 15:24:59
我正在学习高级PHP标准,并尝试实现新的有用方法。之前,我__autoload只是为了避免在每个页面上包含多个文件而逃脱,但是最近我看到了一个提示__autoload manualspl_autoload_register()为自动加载类提供了更灵活的替代方法。因此,不建议使用__autoload(),以后可能不建议使用或将其删除。但我真的不知道如何实施spl_autoload和spl_autoload_register
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

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。


希望这可以帮助...


查看完整回答
反对 回复 2019-10-23
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

从PHP 5.3开始,您可以使用spl_autoload_register()名称空间,这意味着您可以组织项目并自动加载php类,而无需任何要求或包含,也无需重新定义__autoload()函数。


为了演示这种行为,只需创建一个名为index.php的文件:


<?php

spl_autoload_register();

var_dump(new Main\Application);

然后在index.php文件旁边创建一个名为Main的文件夹。最后,在Main中创建一个名为Application.php的文件,并将以下代码粘贴到其中:


<?php namespace Main;

class Application{}


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 652 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信