За последние 24 часа нас посетили 30747 программистов и 1480 роботов. Сейчас ищут 913 программистов ...

Вопрос про автолоадер

Тема в разделе "PHP для новичков", создана пользователем machetero, 31 янв 2016.

  1. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Код (PHP):
    1. <?php
    2.  
    3. /*
    4. |--------------------------------------------------------------------------
    5. | Create The Application
    6. |--------------------------------------------------------------------------
    7. |
    8. | The first thing we will do is create a new Laravel application instance
    9. | which serves as the "glue" for all the components of Laravel, and is
    10. | the IoC container for the system binding all of the various parts.
    11. |
    12. */
    13.  
    14. $app = new Illuminate\Foundation\Application(
    15.     realpath(__DIR__.'/../')
    16. );
    17.  
    18. /*
    19. |--------------------------------------------------------------------------
    20. | Bind Important Interfaces
    21. |--------------------------------------------------------------------------
    22. |
    23. | Next, we need to bind some important interfaces into the container so
    24. | we will be able to resolve them when needed. The kernels serve the
    25. | incoming requests to this application from both the web and CLI.
    26. |
    27. */
    28.  
    29. $app->singleton(
    30.     Illuminate\Contracts\Http\Kernel::class,
    31.     App\Http\Kernel::class
    32. );
    33.  
    34. $app->singleton(
    35.     Illuminate\Contracts\Console\Kernel::class,
    36.     App\Console\Kernel::class
    37. );
    38.  
    39. $app->singleton(
    40.     Illuminate\Contracts\Debug\ExceptionHandler::class,
    41.     App\Exceptions\Handler::class
    42. );
    43.  
    44. /*
    45. |--------------------------------------------------------------------------
    46. | Return The Application
    47. |--------------------------------------------------------------------------
    48. |
    49. | This script returns the application instance. The instance is given to
    50. | the calling script so we can separate the building of the instances
    51. | from the actual running of the application and sending responses.
    52. |
    53. */
    54.  
    55. return $app;
    56.  
    Вот код. В нём используются константы классов, но сами классы не загружены. Неужели автолоадер(зарегистрированный spl_autoload_register'ом) умеет грузить классы, когда используются их константы или стат. свойства ? Объекты классов не создаются.
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    идет обращение к КЛАССУ. класса нет в памяти. совершается попытка загрузки класса.
    создание экземпляра класса это тоже в первую очередь обращение к классу.
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    чтобы превратить конструкцию вида Illuminate\Contracts\Console\Kernel::class в строку, интерпретатору не приходится подгружать сам класс. попробуй подставить сюда несуществующее имя класса, ошибки в этом месте не возникнет!

    Код (PHP):
    1. <?php
    2.  
    3. namespace Any\Imagine\Space;
    4.  
    5. echo \Undefined\Fake\OloloCLass::class, "\n",
    6.      PyshPysh::class;
     
  4. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    а почему так ? я шерстил мануал, но ничего про это не нашёл.
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Разве не очевидно почему? Потому что сам класс в этом не участвует. Результат этого "выражения" — просто имя класса. Сформированное с учетом текущего пространства имен. Не надо путать подобные конструкции с настоящими константами класса.
     
  6. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Спасибо что объяснил. Я не знал, что это, что то типа предопределённой константы класса.