Php имя файла include

Включения и пространство имён

Конструкции включений позволяют собирать PHP программу (скрипт) из нескольких отдельных файлов.

require()

Конструкция require позволяет включать код до выполнения сценария.

При запуске программы интерпретатор заменит инструкцию на содержимое файла имя_файла (этот файл может также содержать сценарий на PHP).

include

Конструкция include также предназначена для включения файлов в код сценария PHP. В отличие от конструкции require конструкция include позволяет включать файлы в код PHP скрипта во время выполнения сценария.

require_once и include_once

Используя конструкции однократного включения require_once и include_once, можно быть уверенным, что один файл не будет включен дважды. Работают конструкции require_once и include_once так же, как и requre и include. Разница в их работе лишь в том, что перед включением файла интерпрететор проверяет, включен ли указанный файл ранее или нет. Если да, то файл не будет включен вновь.

// file: print.php function sayHi() < print_r('Hi!'); >// file: index.php require_once 'print.php'; sayHi(); // => Hi!

Рассмотрим следующий пример

// file: print.php print_r("Hi from print.php!\n"); // file: index.php require_once 'print.php'; print_r("Hi from index.php!\n");
$ php index.php Hi from print.php! Hi from index.php!

Видно, что сначала выполнился код, находящийся во включаемом файле, и только потом код в файле index.php. Этот механизм рекурсивен по своей природе: если во включаемом файле есть другой включаемый файл, то сначала исполнится он. Такое поведение чем-то похоже на матрешку. Можно сказать, что весь код всех файлов проекта находится в одном пространстве и доступен для использования напрямую.

Из всех четырех конструкций для включения файлов пользоваться имеет смысл только одной — require_once. Она обладает двумя важными свойствами:

  • Если файл отсутствует, то эта конструкция приведет к ошибке, и программа остановит свое выполнение;
  • Если в require_once передается файл, который уже был где-то загружен ранее, то она не будет выполнять этот файл повторно, но код этого файла все равно станет доступным.

Эти два условия важны, так как код, опирающийся на них, получается более качественным и простым. В отличие от require_once, остальные конструкции не отвечают этим требованиям: require исполняет включаемый файл каждый раз, а include и include_once не приводят к ошибке в ситуации, когда файла не существует.

Сейчас пррграммисты называют такое поведение языка абсолютным злом. Т.к когда создавался PHP болших библиотек ещё не существовало, и такого механизма включения чтобы разбить сложный код на части вполне было достаточно.

Cовременный стандарт разработки на языке PHP полагается на механизм автозагрузки и запрещает использование явного включения файлов. И в реальном коде за включение файлов отвечает Composer — менеджер управления зависимостями, его мы рассмотрим позже.

Пространства имён.

Но всё же механизм включения в PHP существует. И мы его рассмртрим что бы понять как он работает впринципе.

Приложения на PHP состоят из многих тысяч строк кода. Значительная часть этого кода приходит из библиотек, написанных другими людьми, и почти наверняка мы не знаем, как они там внутри устроены. Чем больше библиотек вы используете, чем больше разработчиков в проекте и, собственно, кода проекта, тем выше вероятность того, что вы начнете натыкаться на ошибку Cannot redeclare . Это прризойдёт когда мы попытатемся определить в коде две разные функции, но с одинаковыми именами:

 function foo() < print_r('two'); >$ php index.php PHP Fatal error: Cannot redeclare foo() (previously declared in /private/var/tmp/index.php:3) 

Более того, может оказаться так, что две разные библиотеки, которые вам так нужны в проекте, имеют одинаковые имена функций, а, следовательно, вы физически не сможете их использовать вместе. А включение каждой новой библиотеки в код проекта почти наверняка заставит переименовывать функции самого проекта.

Читайте также:  Число кратно числу java

Начиная с PHP версии 5.3 в языке появился механизм пространств имен, в задачу которого входит изоляция кода разных файлов друг от друга. Концепция такого механизма встречается в нашей жизни повсеместно. В файловой системе роль пространств имён выполняют директории, в телефонах — код страны, в адресах — страны, города и улицы.

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

в echo 'something'; ?>

В приведенном выше примере файл index.php будет включать в себя x.php, затем x.php будет включать index.php назад, впоследствии index.php выводит «что-то» и возвращает управление x.php, x.php возвращает управление индексу .php и достигает выхода;

Это показывает, что даже если index.php был запрошенным скриптом, он также был включен из другого сценария.

Источник

Оцените статью