Проблема с использованием 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)
Другие вопросы по тегам