了解自动加载和spl_autoload_register

时间:2013-03-24 16:46:49

标签: php autoload spl-autoload-register

我有一个小小的框架,在我的脚本中我使用自动加载(我现在意识到我需要在我的脚本中开始摆脱这个功能)

我现在正在尝试使用Twilio API,在他们的代码中,他们使用spl_autoload_register函数。在我对其中一个类进行新调用时,在脚本的其余部分调用twilio代码的逻辑块之后

我的文件结构是这个

/classes/
    autoload.php
    DB_Connect.php

/classes/Twilio/

/sms/Twilio/Services/
    twilo.php

正在崩溃的脚本看起来像这样

<?php 

include(classes/autoload.php);

if($something_is_true){
    requrie_once(sms/Twilio/Services/Twilio.php);
    //here is where the spl_autoload_register() is called
}

$connection = new DB_Connect();
//script is broken here

我现在需要在Classes文件夹中做些什么来使所有类都有效?

1 个答案:

答案 0 :(得分:3)

原因可能是您的自动加载器(__autoload()) gets completely replaced once spl_autoload_register() is called

  

如果您的代码具有现有的__autoload()函数,则必须在__autoload堆栈上显式注册此函数。这是因为spl_autoload_register()将通过spl_autoload()或spl_autoload_call()有效地替换__autoload()函数的引擎缓存。

您可以在几秒钟内更新脚本,因为只需稍作更改即可正确注册自动加载器。

目前它看起来像这样:

function __autoload($class) {
    // ...
}

像这样更改(假设您运行的是PHP 5.3):

spl_autoload_register(function ($class) {
    // ...
});

在PHP 5.3之前添加它也应该有效:

spl_autoload_register('__autoload');