2016-10-18 4 views
4

Кажется, следующие два стиля кода делают ту же работу:Почему в некоторых фреймворках используется более синтаксис include?

require_once './foo.php'; 
require_once './../bar.php'; 

require_once __DIR__.'/foo.php'; 
require_once __DIR__.'/../bar.php'; 

Очевидно, что первая форма короче и чище. Тем не менее, я вижу вторую форму во многих сторонних кодах. Есть ли причина предпочесть вторую форму?

+2

Один из них является текущим рабочим каталогом, а другой ссылкой на ссылку на сценарий. – mario

+0

@mario Любая практическая разница? – PHPst

+0

Любая современная структура будет использовать очень ограниченную 'require' (даже одно единственное вхождение для загрузки в' autoload.php' Composer), а затем использовать выражения 'use' для включения новых определений. – Marty

ответ

4

__DIR__ - magic constant, относительно файла текущего скрипта. Однако точка . относится к текущему рабочему каталогу, который мог быть изменен, например, на chdir().

+0

Спасибо. Но я не думаю, что такая возможность может послужить причиной для использования второй формы. 'chdir()' очень редко используется. Разве нет? – PHPst

+2

@PHPst Даже если бы он использовался редко, это было бы слишком много. И так как это определено в контексте фреймворков, вы хотите убедиться, что это безупречно, для любой обозримой возможности. –

+2

Да, «работает большую часть времени, достаточно хорошо» - это не хорошее отношение к кому-то, кто разрабатывает рамки или инструмент для сообщества. – Marty

3

PHP.NET От:

__DIR__

Каталог файла. Если используется внутри include, то возвращается каталог . Это эквивалентно dirname(__FILE__). Это имя каталога не имеет косой черты , если оно не является корневым каталогом.

И затем обращаясь ваш вопрос в комментариях:

Много нот здесь касаются определения магической константы __DIR__ для PHP версий, не поддерживающих эту функцию. Конечно, вы можете определить эту магическую константу для версий PHP, еще не имеющих эту константу, но она победит ее цель, как только вы используете константу в файле с включенным , который может находиться в другом каталоге, а затем в файле определяя константу __DIR__. Таким образом, константа потеряла magic, и это было бы бесполезно, если вы не заведете себя, чтобы все ваши включения включались в тот же каталог.