Проверка, если определено VS автозагрузка класса PSR-4.Почему в автозагрузке PSR-4 не требуется определение «системного» контура? - PullRequest
1 голос
/ 03 мая 2019

В CMS или любых известных системах php применяется следующая практика:

В файле "main php" объявлена ​​константа, например, в moodle определено, например, MOODLE_INTERNAL, и для использованияВ базе данных документы предлагают следующее (как видно из этой части документации ):

defined('MOODLE_INTERNAL') || die();
// Rest of code here

Насколько я понимаю, эта практика используется для проверки, выполняется ли файл php "вsystem ".

В то время как фреймворки, использующие автозагрузку PSR-4, такие как Symfony, такого требования не существует и даже не документированы.Таким образом, у меня есть этот острый вопрос:

Почему в автозагрузке PSR-4 нет такого требования проверять, выполняется ли php-файл "в системе"?

1 Ответ

1 голос
/ 04 мая 2019

Я бы сказал, что этот код следует добавлять к файлам, которые предназначены только для включения, но никогда не называются сами по себе. Однако в PSR-4 включенные файлы никогда не содержат исполняемого кода и не должны быть непосредственно доступны, поэтому эта строка больше не нужна. Если файл содержит только определение класса, выполнение этого файла ничего не изменит.

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

Посмотрите, как Joomla объясняет это: Почему большинство Joomla! Файлы PHP начинаются с определенного ('JEXEC')?

_JEXEC - это константа, которая обычно определяется в файле index.php в корне Joomla! экземпляр и используется для обозначения безопасной точки входа в Joomla.
(...)
Таким образом, общее правило для проверки JEXEC - если файл PHP зависит от другого файла для правильной работы. Как правило, если вы обращаетесь к файлу напрямую без проверки JEXEC, и возникает ошибка PHP (при условии, что в вашем отчете об ошибках PHP по умолчанию задано отображение ошибок) об отсутствующей переменной, функции, объекте или подобном, тогда файл должен быть защищен. - https://docs.joomla.org/JEXEC

...