Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 10

Проблема с пространством имен PHP

18.04.2019, 18:17. Показов 2200. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем привет. пишу проект. Какая-то фигня случилась, или я невнимательный o_O. Хотел сделать контейнер зависимости(DI). И вот проблема. В файле bootstrap.php не видны классы(а конкретно Provider), хотя использую стандартный автозагрузчик, сгенеренный composer-ом. Вот ошибка:

Fatal error: Uncaught Error: Class 'Engine\Service\Database\Provider' not found in D:\OSPanel\domains\cms\engine\bootstrap. php:17 Stack trace: #0 D:\OSPanel\domains\cms\index.php(3): require_once() #1 {main} thrown in D:\OSPanel\domains\cms\engine\bootstrap. php on line 17

Структура проекта в картинке внизу(в Core только подключение к БД):


Итак,
bootstrap.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
 
require_once __DIR__.'/../vendor/autoload.php';
 
use Engine\Cms;
use Engine\DI\DI;
 
 
try {
    //Dependency injection
    $di = new DI();
 
    $services = require __DIR__.'/Config/Service.php';
 
    //Init services
    foreach ($services as $service) {
        $provider = new $service($di);
        $provider->init();
    }
 
    $provider->init();
    $cms = new Cms($di);
    $cms->run();
}catch(\ErrorException $e) {
    echo $e->getMessage();
}

Service.php:
PHP
1
2
3
4
5
6
<?php
 
return [
    Engine\Service\Database\Provider::class,
 
];

Provider.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
namespace Engine\Service\Database;
 
use Engine\Service\AbstractProvider;
 
use Engine\Core\Database\Connection;
 
class Provider extends AbstractProvider {
 
    /**
     * @var string
     */
    public $serviceName = 'db';
    /**
     * @return mixed
     */
    public function init() {
        $db = new Connection();
 
        $this->di->set($this->serviceName, $db);
 
        return $this;
    }
 
    public function test() {
        echo '222';
    }
}

AbstractProvider.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
namespace Engine\Service;
 
abstract class AbstractProvider {
 
    /**
     * @var \Engine\DI\DI;
     *
     */
    protected $di;
 
    public function __construct(\Engine\DI\DI $di) {
        $this->di = $di;
    }
 
    /**
     * @return mixed
     */
    abstract function init();
}

DI.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
 
namespace Engine\DI;
 
class DI {
    /**
    *@var array
    */
    private $container = [];
 
    /**
     * @param $key
     * @param $value
     *
     * @return $this
     */
    public function set($key, $value) {
        $this->container[$key] = $value;
 
        return $this;
    }
 
    /**
     * @param $key
     *
     * @return mixed
     */
    public function get($key) {
        return $this->has($key);
    }
 
    /**
     * @param $key
     *
     * @return bool
     */
    public function has($key) {
        return isset($this->container[$key]) ? $this->container[$key] : null;
    }
 
}
Миниатюры
Проблема с пространством имен PHP  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2019, 18:17
Ответы с готовыми решениями:

Директива using namespace может применяться только к пространствам имен; "System.Object" является типом, а не пространством имен
Что с этим делать?

Непонятки с пространством имен
Есть основной файл проекта - start.cpp , файл описания формы Form1.h , и файл с обработчиками формы actions.cpp, ниже код каждого. При...

Гемор с пространством имен.
Всем доброго времени суток! есть три файла: main.cpp - основной код #include &lt;iostream&gt; #include &quot;Box.h&quot; int...

2
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
18.04.2019, 18:59
Лучший ответ Сообщение было отмечено F1thans0 как решение

Решение

Engine\Service\Database\Provider::class,

Судя по скрину путь должен быть таким:
Engine\DI\Database\Provider::class
1
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 10
18.04.2019, 22:45  [ТС]
Привет. Я бы тогда не спрашивал) Да, должно быть, но только по стандартам psr. С Di тоже не работает

Добавлено через 2 часа 33 минуты
Да, слушай, извини, сглупил где-то. Блять, как обычно, сидишь час над этим, а ошибка совсем простая
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2019, 22:45
Помогаю со студенческими работами здесь

Не является пространством имён
Такой код не работает, как быть? P.S. пишу в Visual Studio 2017 Community namespace a { namespace b {

C++ и директивы include c пространством имён
Всем привет! Я только начал изучать C++:-[, в связи с этим появились вопросы: 1. В одной книге я встретил выражение, и оно меня...

Несколько модулей с одним пространством имен
Хочу сделать несколько модулей ,с разными пространствами имен .Но ,чтобы при этом они бы ли в одном более общем пространстве имен ...

C++ Странность с классом , пространством имен и string
Здравствуйте , я создал некий класс для роботы с длинными числами.Желаю добавить конструктор с параметром - строка(класс string). Но...

Использование заголовочного файла с пространством имён
Попробовал юзать с++/cli, но вот при реализации конструктора компилятор ругается, пример простой: Заголовочный файл //TextBox.h ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru