使用SplClassLoader时遇到麻烦

时间:2014-05-03 04:06:51

标签: php autoloader

这是我第一次用PHP编写应用程序。我通常是Node或MVC4的开发人员,如果这有帮助的话。

这是我这个项目的目录结构:

-TestProject
 --BackgroundWorkers
  ---Worker1
  ----Repositories
   -----Worker1.php
--index.php
--SplClassLoader.php

Worker1.php 中的命名空间为Worker1\Repositories,类名为Worker1

我尝试过可以想到的命名空间和路径的每个组合,但这里有一个例子:

<?php

 require_once("SplClassLoader.php");
 $loader = new SplClassLoader('Worker1\Repositories', 'TestProject/BackgroundWorkers/Worker1');
 $loader -> register();

 $r = new Worker1\Repositories\Worker1();
?>

我做错了什么?

1 个答案:

答案 0 :(得分:1)

所有SplClassLoader都将你的命名空间路径作为目录附加到加载器中定义的提供目录。

如此。给出你的例子:namespace:Worker1 \ Repositories

然后,加载器中定义的目录路径应为:TestProject / BackgroundWorkers。

注意:始终提供完整磁盘路径作为'lookup'目录。

这是一个显示用途的测试文件。我使用'testmysql'而不是'TestProject'。

<?php

require __DIR__. '/SplClassLoader.php';

var_dump(__DIR__);

$loader = new SplClassLoader('Worker1\Repositories', __DIR__.'/BackgroundWorkers');
$loader->register();

$r = new Worker1\Repositories\Worker1();

var_dump($r);

这是worker1类:

<?php

namespace Worker1\Repositories;

// Worker1\Repositories and the class name is Worker1.

class Worker1 {
    public function __construct()
    {
        var_dump('I AM HERE!!', __DIR__, __FILE__, __LINE__);
    }
}

这是屏幕输出:

string 'I AM HERE!!' (length=11)
string 'P:\developer\xampp\htdocs\testmysql\BackgroundWorkers\Worker1\Repositories' (length=74)
string 'P:\developer\xampp\htdocs\testmysql\BackgroundWorkers\Worker1\Repositories\Worker1.php' (length=86)