我正在为我的kickstarter项目制作一个小型自动加载器,我遇到了一个让我感到困惑的问题。
我已经创建了一个loader类,它接受一个必须包含下划线的参数,以了解加载器必须在类之后的位置。 该字符串包含路径信息和类的名称,例如:'path_to_my_class_myclassname' 在加载器类中,我将此字符串由“_”(下划线)分隔符拆分为一个,并以某种方式总是返回一些意外的数组项,例如:
如果字符串为'first'
,则数组将如下所示:
array (size=1)
0 => string 'first' (length=5)
array (size=1)
0 => string 'f' (length=1)
然后,如果我使用下划线,那么字符串是:'youtube_ClassYouTubeAPI'
,它看起来像这样:
array (size=2)
0 => string 'youtube' (length=7)
1 => string 'ClassYouTubeAPI' (length=15)
array (size=1)
0 => string 'y' (length=1)
您可以看到,在这两个示例中,结果数组都包含输入字符串的第一个字母,但不应该。
我也尝试了explode('_',$inputstring)
和preg_split('[_]',$inputstring)
,但结果是一样的。
如果有人可以帮助我,我会很高兴。提前致谢
===更新===========
以下是整个代码:
<?php
class Autoloader {
static public function loader($load_input) {
$load_data = preg_split('[_]',$load_input,0);
$classname = $load_input[count($load_input)-1];
$filename = 'classes/'.implode('/',$load_data).'.php';
var_dump($load_data);
if (file_exists($filename)) {
include($filename);
if (class_exists($classname)) {
return TRUE;
}
}
return FALSE;
}
}
spl_autoload_register('Autoloader::loader');
?>
答案 0 :(得分:1)
拆分工作正常。问题是这一行:
$classname = $load_input[count($load_input)-1];
应该是:
$classname = $load_data[count($load_data)-1];
即。您需要使用$load_data
而不是$load_input
!
否则,您要求输入字符串(即'y')中的[0]
而不是您的爆炸数组中的[0]
,这是youtube
。