Главная > Frameworks > PHP грусть или Как узнать где находится файл определенного класса

PHP грусть или Как узнать где находится файл определенного класса

20.05.2015 1 коммент. » Просмотры: 1 816
 

С приходом в php, всяких вкусностей, типа неймспейсов, автолоадеров, да и просто гонкой фреймворков становится все сложнее работать с кодом. Если раньше все было просто, пара include и простыня методов, то теперь пришли фреймворки с фасадами и IoC контейнерами. В частности, исследуя некий код Laravel, я увидел следующее..

Тут у меня зачесалось в затылке и захотелось исследовать данный класс Request на предмет других методов. Однако, практически сразу же возник вопрос, как найти файл этого класса. Я могу ошибаться, но одна логика тут не поможет.

Если Вы не знаете где лежит этот файл, предлагаю остановиться, поразмыслить и сравнить с результатом. Если Вы догадались логически, напишите в комментах ход Ваших мыслей 🙂

Для поиска мы воспользуемся рефлекцией (хз какой правильный русский термин, оригинал reflection). А именно надо сделать следующее:

 

Результат будет следующий:

..\www\vendor\laravel\framework\src\Illuminate\Support\Facades\Request.php

Теперь если мы сходим в этот файл, мы узнаем что это фасад для IoC контейнера, окау, посмотрев методы класса

..\www\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php

мы находим метод getFacadeRoot(), который возвращает конечный объект связанного класса. Окей, продолжаем, пробуем с помощью рефлексии найти файл класса этого объекта:

и получаем...

..\www\vendor\compiled.php

Ах-ха-ха, в этот файл слиты все классы, по всей видимости для ускорения загрузки... Можно конечно тут поковыряться, но это не совсем то, что надо.. ладно, смотрим имя класса:

получаем:

Illuminate\Http\Request

Ок, расположение Illuminate мы уже видели, поэтому предполагаем что путь к реальному файлу будет такой:

..\www\vendor\laravel\framework\src\Illuminate\Http\Request.php

открываем, смотрим ... да, это именно он и есть..

Для того, чтобы убедиться можем добавить туда тестовый метод:

и вызвать его так:

не забыв предварительно переименовать vendor/compiled.php в что-то другое, например: vendor/compiled.php.bak

Так же, после того как мы переименовали vendor/compiled.php в нечто другое, вот этот код:

будет давать правильный путь:

..\www\vendor\laravel\framework\src\Illuminate\Http\Request.php
 

Ну, а для тех кого заинтересуют другие возможности ReflectionClass оставляю ссылку на ман: Reflection Class на php.net

Вывод

Говорят, что фреймворки рулят - их просто освоить и в дальнейшем использовать все уже готовенькое.. Я не знаю как человек без опыта разработки, может "легко освоить" нечто подобное. Пустой проект на Laravel содержит 4700 файлов..

Знаете, я скучаю за сайтами, которые делал в 2000х, когда я не знал о всяких фреймворках, git-ах, composer-ах и прочих "упрощающих работу" приблуд.. Знаете как выглядел типичный код сайта? Вот так:

 

ПРОЕКТ!!! - 1 файл, 505 символов, 3и веб-страницы. Порог входа 30 секунд ... эхх были времена..

Вот еще картинка "в тему":

Стартуем сайт в 2014 году

Стартуем сайт в 2014 году

Хотя, может быть, это я просто старею..

P.S. Если Вы человек, который собеседует Laravel программистов, тогда у вас есть возможность, протестировать знания человека всего одним вопросом:

В контроллере есть код use Request;, по какому пути находится файл с этим классом и объект какого класса создается при вызове Request::something();. Если человек сможет правильно ответить на этот вопрос, можете смело его брать на работу - он или отличный программист или читатель моего блога или разработчик laravel 🙂

Автор: | Теги: , , ,

Важно

У нас заработал ФОРУМ. Все вопросы, которые не касаются статьи, а так же вопросы по конкретно вашему случаю нужно задавать и обсуждать именно там, в разделе "Помощь пользователям".

Есть 1 комментарий.

Написать свой
  1. Андрей Ответить
    05.07.2017 в 4:03 пп
    P.S. Если Вы человек, который собеседует Laravel программистов, тогда у вас есть возможность, протестировать знания человека всего одним вопросом:

    В контроллере есть код use Request;, по какому пути находится файл с этим классом и объект какого класса создается при вызове Request::something();. Если человек сможет правильно ответить на этот вопрос, можете смело его брать на работу - он или отличный программист или читатель моего блога или разработчик laravel

    это 2 вопроса.
    Спасибо, очень познавательная статья.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>