За последние 24 часа нас посетили 194675 программистов и 2009 роботов. Сейчас ищут 2012 программистов ...

Пространства имен и автозагрузка

Тема в разделе "PHP для новичков", создана пользователем abler98, 21 сен 2014.

  1. abler98

    abler98 Активный пользователь

    С нами с:
    31 авг 2014
    Сообщения:
    43
    Симпатии:
    0
    Всем доброго времени суток. Сейчас вот создаю свою MVC систему, но сразу же возникли проблемы с автозагрузкой. Собственно вот что у меня сейчас есть:
    Код (Text):
    1. <?php
    2.  
    3. spl_autoload_register(function ($class) {
    4.     $class = ltrim($class, '\\');
    5.     $class = str_replace('_', '\\', $class);
    6.     $class = str_replace('\\', '/', $class);
    7.     if (strpos($class, '/')) {
    8.         if ($namespace = explode('/', $class)) {
    9.             switch ($namespace[0]) {
    10.                 case 'Annex':
    11.                     if (file_exists($file = __DIR__.'/src/'.$class.'.php')) {
    12.                         require $file;
    13.                     }
    14.                 break;
    15.             }
    16.         }
    17.     } else {
    18.         if (file_exists($file = __DIR__.'/app/models/'.$class.'.php')) {
    19.             require $file;
    20.         } else if (file_exists($file = __DIR__.'/app/controllers/'.$class.'.php')) {
    21.             require $file;
    22.         } else if (file_exists($file = __DIR__.'/app/utils/'.$class.'.php')) {
    23.             require $file;
    24.         }
    25.     }
    26. });
    Все вроде нормально, но в каждом классе нужно прописывать namespace ...; и обратиться к классу можно только
    так: $object = new Vendor\Namespace\ClassName; или так: use Vendor\Namespace\ClassName; $object = new ClassName; А мне нужно чтоб можно было без всего этого создать экземпляр класса.
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
  3. Sallevan

    Sallevan Новичок

    С нами с:
    14 сен 2014
    Сообщения:
    4
    Симпатии:
    0
    Прикольно полазеть посмотреть какие проблемы у людей возникаю в написании скриптов)
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Что то не совсем понятно, если вы используете пространство имен то надо обращаться к его элементам (или как там правильно) так:
    Код (PHP):
    1. $object = new Vendor\Namespace\ClassName;
    или так
    Код (PHP):
    1. use Vendor\Namespace\ClassName; 
    2. $object = new ClassName;
    по другому вроде ни как.