我将 Slim PHP 框架与 Joomla 结合使用。使用 Slim 框架,我正在创建一个 REST 服务,例如
$app->post('/api/users', function() {
..trying to instantiate class here..
});
Joomla 使用该jimport()
功能导入文件(jimport()
链接到register()
);
function & register ($class = null, $file = null)
{
static $classes;
if(!isset($classes)) {
$classes = array();
}
if($class && is_file($file))
{
// Force to lower case.
$class = strtolower($class);
$classes[$class] = $file;
// In php4 we load the class immediately.
if((version_compare( phpversion(), '5.0' ) < 0)) {
JLoader::load($class);
}
}
return $classes;
}
function load( $class )
{
$class = strtolower($class); //force to lower case
if (class_exists($class)) {
return;
}
$classes = JLoader::register();
if(array_key_exists( strtolower($class), $classes)) {
include($classes[$class]);
return true;
}
return false;
}
因此,它不是直接包含文件,而是返回类数组,因此只有在实例化类时才会__autoload()
调用 PHP 函数:
function __autoload($class)
{
if(JLoader::load($class)) {
return true;
}
return false;
}
所以这正常工作。当我在上面的匿名函数中实例化类时,问题就发生了,PHP 从不调用该__autoload()
函数——因此从不包含该类。
是否可以在匿名函数内实例化时自动加载类?