- 我正在使用 Codeigniter 2.1.0。
- 我正在使用自定义模型中包含 Amazon Web Services SDK
require_once APPPATH . "/libraries/aws_sdk/sdk.class.php";
这很好用。然而,当 CI 决定稍后需要加载它的数据库缓存类时,它会调用(通过 CI_DB_driver::_cache_init):
if ( ! class_exists('CI_DB_Cache'))
{
if ( ! @include(BASEPATH.'database/DB_cache.php'))
{
return $this->cache_off();
}
}
这会触发 AWS 开发工具包的自动加载(确切的方法是CFLoader::autoloader
)。
我可以通过告诉不要自动加载来解决这个问题,因为如果返回 false class_exists
,似乎无论如何都会包含 DB_cache.php :class_exists
if ( ! class_exists('CI_DB_Cache', false))
{
if ( ! @include(BASEPATH.'database/DB_cache.php'))
{
return $this->cache_off();
}
}
这种肮脏的修复工作,但显然只能解决眼前的问题。一般来说,确保 CodeIgniter 不会与其他库的自动加载混淆的最佳方法是什么?
请注意:
- 我已经阅读了有关使用
spl_autoload_register
. Codeigniter 似乎没有使用它,我不确定我应该如何安全地实现它。我会找到一个可靠的例子来说明我应该如何以及在哪里实现这个最有用的(当然,如果这是解决方案)。 - AWS 开发工具包似乎已经使用
spl_autoload_register
:spl_autoload_register(array('CFLoader', 'autoloader'));