Проблема с использованием SplClassLoader
Я впервые пишу приложение на 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 ответ
Все, что делает SplClassLoader - добавляет путь к пространству имен в виде каталогов в предоставленный каталог, определенный в загрузчике.
так. учитывая ваш пример: namespace: Worker1\Repositories
Тогда путь к каталогу, определенный в загрузчике, должен быть: TestProject/BackgroundWorkers.
Примечание: всегда указывайте полный путь к диску в качестве справочника поиска.
Вот тестовый файл, который показывает использование. Я использую "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)