За последние 24 часа нас посетили 22467 программистов и 1030 роботов. Сейчас ищут 682 программиста ...

class_exists() не видит класс.

Тема в разделе "PHP для новичков", создана пользователем Hyacinthus, 16 янв 2022.

  1. Hyacinthus

    Hyacinthus Новичок

    С нами с:
    13 мар 2021
    Сообщения:
    15
    Симпатии:
    0
    Вот фрагмент кода.
    PHP:
    1.     public static function dispatch ($url){
    2.         if (self::matchRoute($url)){
    3.             echo $controller = 'app\controllers\\' . self::$route['prefix'] . self::$route['controller'] . 'Controller';
    4.             if (class_exists($controller)) {
    5.                 $controllerObject = new $controller(self::$route);
    6.                 $action = self::lowerCamelCase(self::$route['action']) . 'Action';
    7.                 if (method_exists($controllerObject, $action)) {
    8.                     $controllerObject -> $action();
    9.                 }else {
    10.                     throw new \Exception("Method $controller::$action not found", 404);
    11.                 }
    12.             }else {
    13.                 throw new \Exception("Controller $controller not found", 404);
    14.             }
    15.         }else {
    16.             throw new \Exception("Page not found", 404);
    17.         }
    18.     }
    if (class_exists($controller)) не видит мой класс: app\controllers\MainController.php, и перебрасывает на: else {throw new \Exception("Controller $controller not found", 404).
    В браузере я получаю:
    app\controllers\MainController

    An error has occurred
    Error Code: Exceptions
    Error text: Controller app\controllers\MainController not found
    Error file: /opt/lampp/htdocs/cryptoriot/classhgpd/core/Router.php
    Мой класс:
    app\controllers\MainController.php
    PHP:
    1. <?php
    2. namespace classapp\controllers;
    3.  
    4. class MainController
    5. {
    6. }
    Моя система:
    Eclipse IDE for PHP Developers (includes Incubating components)
    Version: 2021-12 (4.22.0)
    Build id: 20211202-1639
    OS: Linux, v.5.15.12-1-MANJARO, x86_64 / gtk 3.24.31
    Java vendor: N/A
    Java runtime version: 17.0.1+12
    Java version: 17.0.1

    php 7.4.27-1

    Я перепровери код много раз. Пробовал разные варианты написания. Перечитал всё что google имеет на эту тему. Ещё раз прочитал описание классов в php. Прочитал документацию eclipse...
    Что бы я не делал class_exists() тупо не видит мой класс и всё.
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Для начала - пересчитайте "слешики".
     
  3. Hyacinthus

    Hyacinthus Новичок

    С нами с:
    13 мар 2021
    Сообщения:
    15
    Симпатии:
    0
    Со слешами всё норм. Я думал это понятно из:
    PHP:
    1. echo $controller = 'app\controllers\\' . self::$route['prefix'] . self::$route['controller'] . 'Controller';
    И:
    В браузере я получаю:
    app\controllers\MainController
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    А автолоад через что делаете?
    --- Добавлено ---
    А он тут причём вообще?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Нём спейс посмотрите...
    Это же не app/
     
    Hyacinthus нравится это.
  6. Hyacinthus

    Hyacinthus Новичок

    С нами с:
    13 мар 2021
    Сообщения:
    15
    Симпатии:
    0
    В composer.json у меня заданы следующие пространства и папки для них:
    PHP:
    1. {
    2.     "name" : "cryptoriot/cryptoriot",
    3.     "description" : "Fuck The World",
    4.     "type" : "library",
    5.     "autoload" : {
    6.         "psr-4" : {
    7.             "classapp\\" : "app",
    8.             "classhgpdas\\" : "classhgpd",
    9.             "classlibs\\" : "classhgpd/core/libs",
    10.             "classbase\\" : "classhgpd/core/base",
    11.             "classcore\\" : "classhgpd/core"
    12.         }
    13.     }
    14. }
    А в папке app ещё несколько папок, одна из которых app\controllers где и лежит файл моего класса MainController.php
    По этому и namespace выглядит как classapp\controllers
    --- Добавлено ---
    Composer
    PHP:
    1. require_once  dirname(__DIR__) . '/vendor/autoload.php';
    --- Добавлено ---
    Я использую Eclipse IDE.
    И подумал что,- может есть какая ни буть галочка, в недрах eclipse, которую я не поставил.. :)
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Ну так тогда используйте classapp, как вы неймспейс обозвали, а вы используете название папки, куда вы этот неймспейс натравили.

    И откуда у людей берутся такие мысли... IDE - это просто текстовый редактор с расширенными функциями для удобства работы с кодом. Но текстовые редакторы не выполняют код
     
    Hyacinthus нравится это.
  8. Hyacinthus

    Hyacinthus Новичок

    С нами с:
    13 мар 2021
    Сообщения:
    15
    Симпатии:
    0
    Благодарю всех за помощь. Меня не было два дня по не зависящим от меня причинам. Сейчас исправил, всё работает. :)