Возникли проблемы с пространствами имен и set_include_path() в PHP

C:\xampp\htdocs содержит Controller.php и ApplicationHelper.php. C:\xampp\htdocs \ site содержит index.php.

Вот ошибка, которую я получаю:

Неустранимая ошибка: класс 'site\controller\ApplicationHelper' не найден в C:\xampp\htdocs\Controller.php в строке 17

Я новичок во всем бизнесе с пространствами имен, но я не уверен на 100%, что за этим стоит. Просто кажется, что он не находит ApplicationHelper.php, хотя я установил включаемый путь для просмотра в этой папке. Это работает, если я непосредственно включаю ApplicationHelper.php в Controller.php. Вот (соответствующий) код:

index.php

set_include_path(get_include_path() . PATH_SEPARATOR . 'C:\xampp\htdocs');

require('Controller.php');
\site\controller\Controller::run();

controller.php

namespace site\controller;

class Controller {

    private $applicationHelper;
    private function __construct () {}

    static function run () {
        $instance = new Controller();
        $instance->init();
    }

    function init () {
        $applicationHelper = ApplicationHelper::instance();
        $applicationHelper->init();
    }

}

ApplicationHelper.php

namespace site\controller;

class ApplicationHelper {

    private static $instance;

    private function __construct () {}

    static function instance () {
        if (!self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    function init() {

    }

}

Спасибо за помощь!

2 ответа

Решение

Вам необходимо включить ApplicationHelper.php или использовать автозагрузчик.

function __autoloader($class_name)
{
    include  $class_name . "php";
}
Другие вопросы по тегам