2013-03-24 54 views
2

我有一个小framerwork,在我的剧本我使用自动加载(我刚才知道,我需要在我的脚本来启动摆脱这一功能)了解自动加载和spl_autoload_register

我现在正在尝试使用Twilio API,在他们的代码中,他们使用spl_autoload_register函数。逻辑块的twilio代码调用的脚本的其余部分发生故障时我做一个新的呼叫我的课之一后

我的文件结构是这样的

/classes/ 
    autoload.php 
    DB_Connect.php 

/classes/Twilio/ 

/sms/Twilio/Services/ 
    twilo.php 

被打破脚本down看起来像这样

<?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文件夹中做些什么来使所有的类都可以工作?

回答

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'); 
+0

+1'原因可能是您的自动加载器完全被替换一次 - 这是我错过的重要部分看着PHP手册! – 2014-01-11 16:55:48