За последние 24 часа нас посетили 231312 программистов и 1778 роботов. Сейчас ищут 3005 программистов ...

spl_autoload_register и namespace

Тема в разделе "Прочие вопросы по PHP", создана пользователем 2misha, 24 июл 2016.

  1. 2misha

    2misha Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    17
    Симпатии:
    0
    Гайз, прошу помощи, не могу добиться чтоб функция spl_autoload_register адекватно работала с namespace.

    index.php
    PHP:
    1.     namespace project;
    2.    
    3.     $map = include "map.php";
    4.    
    5.     spl_autoload_register(function($class)
    6.     {
    7.         global $map;
    8.         require_once $map[$class];
    9.     });
    10.  
    11.    
    12.     use project\app\PageRouter as PageRouter;
    13.    
    14.     $pageRouter = new PageRouter("i");
    app/PageRouter.php
    PHP:
    1.     namespace project\app;
    2.  
    3.     class PageRouter
    4.     {
    5.         public function PageRouter($url)
    6.         {
    7.             echo "ok";
    8.         }
    9.     }
    Ну а переменная $map вот:
    Код (Text):
    1. Array
    2. (
    3.     [project\app\PageRouter] => app/PageRouter.php
    4. )
    Собственно, сам файл инклюдится (проверял написав эхо вне класса), но класс собственно нужный не создается, эхо в конструкторе не выводится.

    Подскажите, как должна мапа выглядеть или что сделать чтоб работало адекватно?
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. 2misha

    2misha Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    17
    Симпатии:
    0
    Как оно подключает файлы я вроде понял (оно ведь их подключает), но вот у меня с неймспейсами косяк видно ... Не подскажешь что не так в моем коде?
     
  4. 2misha

    2misha Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    17
    Симпатии:
    0
    И ещё одно: если в классе PageRouter создать какую-то переменную, то когда вардампишь $pageRouter, то оно её видит. Или если сделать функцию которая возвращает ту переменную - тоже работает.

    Но эхо не выполняется с конструктора. В других функциях эхо работает.

    Что бы это могло быть?
    --- Добавлено ---
    Короче оказалось, что единственное, что не работает - это старый конструктор (через function НазваниеКласса). А конструктор __construct работает.

    Версия 5.5 . Но если без неймспесов то обычный конструктор работает.
     
    #4 2misha, 24 июл 2016
    Последнее редактирование: 24 июл 2016
  5. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @2misha теперь всё понятно?
     
  6. 2misha

    2misha Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    17
    Симпатии:
    0
    Да.