我创建了一个Autoloader类,该类可以很好地与名称空间配合使用(例如:App \ Table \ Article OK)。
但是当我尝试加载包含其目录名称的类时,它不起作用(App \ Table \ UserTable不能正常运行)。
我在'require'之前尝试了var_dump,并且我已经看到自动加载器工作两次。
第一个var_dump返回预期的字符串:Table / UserTable
第二次删除班级名称,但不删除目录部分(App \ Table \ UserTable变为Table / Table)。
namespace App;
class Autoloader
{
static function register(){
spl_autoload_register(array(__CLASS__, 'autoload'));
}
public static function autoload($nomdelaclasse){
$nomdelaclasse = str_replace(__NAMESPACE__.'\\', '', $nomdelaclasse);
$nomdelaclasse = str_replace('\\', '/', $nomdelaclasse);
var_dump($nomdelaclasse);
require(__DIR__.'/'.$nomdelaclasse.'.php');
}
}
(UserClass为空,这只是一个示例。 DIR 是C:\ wamp64 \ www \ test \ graphikart \ tp_structure \ app)
它返回:
致命错误:在第4行的C:\ wamp64 \ www \ test \ graphikart \ tp_structure \ app \ Table \ UserTable.php中找不到类“ App \ Table \ Table”
我不明白为什么自动加载会修改我的类名,为什么指令在调用require之前似乎能工作两次。
有人可以解释吗?
答案 0 :(得分:1)
我认为您可能会使使用正斜杠的所有正则表达式变得比需要复杂。这是从配置运行的自动装带器的示例。该目录中的实际类文件名为(类似)“ class_does_something.php”,该文件中的实际类名称为...
class does_something
{
}
然后我使用
调用它 $does_something = new does_something();
这是自动加载器:
function class_autoload($class)
{
$filename = $class . '.php';
$filepath = __DIR__ . '/path_to_classes_directory/class_' . $filename;
if (!file_exists($filepath))
{
throw new Exception('Error_104: ' . $class);
}
else
{
try
{
include_once( $filepath );
}
catch(Exception $e)
{
echo $e->getMessage();
}
}
}
//engage the class autoloader
spl_autoload_register('class_autoload');