这是我第一次用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();
?>
我做错了什么?
答案 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)