Код (PHP): <?php /* |-------------------------------------------------------------------------- | Create The Application |-------------------------------------------------------------------------- | | The first thing we will do is create a new Laravel application instance | which serves as the "glue" for all the components of Laravel, and is | the IoC container for the system binding all of the various parts. | */ $app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../') ); /* |-------------------------------------------------------------------------- | Bind Important Interfaces |-------------------------------------------------------------------------- | | Next, we need to bind some important interfaces into the container so | we will be able to resolve them when needed. The kernels serve the | incoming requests to this application from both the web and CLI. | */ $app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class ); /* |-------------------------------------------------------------------------- | Return The Application |-------------------------------------------------------------------------- | | This script returns the application instance. The instance is given to | the calling script so we can separate the building of the instances | from the actual running of the application and sending responses. | */ return $app; Вот код. В нём используются константы классов, но сами классы не загружены. Неужели автолоадер(зарегистрированный spl_autoload_register'ом) умеет грузить классы, когда используются их константы или стат. свойства ? Объекты классов не создаются.
идет обращение к КЛАССУ. класса нет в памяти. совершается попытка загрузки класса. создание экземпляра класса это тоже в первую очередь обращение к классу.
чтобы превратить конструкцию вида Illuminate\Contracts\Console\Kernel::class в строку, интерпретатору не приходится подгружать сам класс. попробуй подставить сюда несуществующее имя класса, ошибки в этом месте не возникнет! Код (PHP): <?php namespace Any\Imagine\Space; echo \Undefined\Fake\OloloCLass::class, "\n", PyshPysh::class;
Разве не очевидно почему? Потому что сам класс в этом не участвует. Результат этого "выражения" — просто имя класса. Сформированное с учетом текущего пространства имен. Не надо путать подобные конструкции с настоящими константами класса.