Autoloader PHP修改被调用类的名称

Autoloader PHP修改被调用类的名称,php,oop,autoload,autoloader,Php,Oop,Autoload,Autoloader,我已经创建了一个Autoloader类,它可以很好地使用名称空间(例如:App\Table\Article OK) 但是当我尝试加载一个包含其目录名的类时,它不起作用(App\Table\UserTable not OK) 我在“require”之前尝试了var_转储,我已经看到自动加载器工作了两次 第一个var_转储返回预期的字符串:Table/UserTable 第二次,它删除了我的类的名称,但没有删除目录部分(App\Table\UserTable变成Table/Table) (UserC

我已经创建了一个Autoloader类,它可以很好地使用名称空间(例如:App\Table\Article OK)

但是当我尝试加载一个包含其目录名的类时,它不起作用(App\Table\UserTable not OK)

我在“require”之前尝试了var_转储,我已经看到自动加载器工作了两次

第一个var_转储返回预期的字符串:Table/UserTable

第二次,它删除了我的类的名称,但没有删除目录部分(App\Table\UserTable变成Table/Table)

(UserClass为空,这只是一个示例。 DIR是C:\wamp64\www\test\graphikart\tp\u structure\app)

它返回:

致命错误:在第4行的C:\wamp64\www\test\graphikart\tp\u structure\App\Table\UserTable.php中找不到类“App\Table\Table”

我不明白为什么自动加载会修改我的类名,为什么在调用require之前指令似乎工作了两次


有人能解释一下吗

我想你可能把它弄得比所有斜杠变化的正则表达式都要复杂。下面是一个从配置运行的自动加载程序的示例。目录中的实际类文件名为(类似于)'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');

我试图在我的要求之前添加类_,但它不起作用,我仍然有相同的问题..嗨!谢谢你的帮助,我修改了我的问题,使之更简单(哦,正则表达式用来处理名称空间)。我想创建自己的自动加载器,使我的代码更清晰。它工作得很好,但在这种特殊情况下(类名包含目录名),我对它的行为有问题。您的代码将不会处理名称空间,因为您必须更改路径:)不确定这是否是您的问题,但在您的示例中,应该需要(DIR.'/'.$nomdelaclasse..php');be require(DIR.'\'.$nomdelaclasse.'.php');还有@ArtisticPheonix..谢谢你注意到strtolower…我暂时把它放在那里是为了我自己(习惯于给第一个字母加上封顶),现在甚至都没有注意到它。@massya92,除非你做了一些独特的事情,你确定你甚至需要使用名称空间吗?Wamp在()上运行,所以正常url和includes的规则应该适用。我删除了我的答案,在我付出了这么多努力之后,我不会被否决,你可能希望提到这个~
我在我的子类“UserTable”的父类“Table”的命名空间中犯了一个错误。这就是为什么自动装弹机工作了两次,为什么它没有工作!我很笨。谢谢你的帮助
-PS没有愚蠢的问题,每个人都会时不时地犯错误。
是用于删除
——我投票认为这是一个印刷错误。干杯
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');