Возникли проблемы с пространствами имен и 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";
}
Смотрите это: http://php.net/manual/en/language.oop5.autoload.php