Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

include тупо вставляет содержимое файла?

#php #include


Всем привет. Ходил на курсы php и в итоге понял, что вообще ничего не понимаю.
Например код 
main.php




test1.php




Как рассказывали на курсах, php берет все, что внутри test1.php, т.е.




и помещает на место инклуда в main.php




В итоге main.php превращается в




Тут всю понятно, но на самом ли деле php делает именно так? Если, например, взять
другой код main2.php




По идее php должен все, что в test1.php поместить в main2.php и на выходе должно
получиться 

 
?>


Но получаются двойные теги php. Так что же на самом деле делает php? Получается помимо
копирования кода, он еще и удаляет двойные теги и где он их удаляет внутри или разбивает
код на части типа как?

 



А если, например, во включаемом файле будет html?

main3.php




test2.php

привет, мир

Как тогда будет вставлен код? Так, верно? или я все неправильно понимаю?

привет, мир

Также непонятно, если php с помощью include просто вставляет код, то почему тогда код main4.php выведет и $b и $a? **test3.php** Хотя мы же return-ом завершили выполнение кода? Т.е. main4.php должен превратиться во что-то вроде и вывод должен ограничиться только $b (потому что return) ?


Ответы

Ответ 1



include не столько вставляет файл, сколько выполняет его в текущем контексте. В понятие "контекст" - входят локальные переменные, определенные в файле функции, и т.п. Однако, в понятие "контекст" не входят скобки php (). Просто потому что эти скобки - это не команды языка, а просто оформление. Оформляется каждый из файлов всегда независимо от других.

Ответ 2



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

Ответ 3



include позволяет динамически подключать (в зависимости от контекста - то есть по ходу исполнения сценария) необходимый код, например так: for($i=1; $i<=100; $i++) { include "$i.php"; } Дальше можно использовать нужную функцию в нужном месте. Из примера выше следует, что у Вас может быть множество функций, объектов с различными методами и др., разбитых по какому-то принципу в разные файлы php, которые вызываются при помощи include. Этим include отличается от require, который позволяет включить кусок кода ДО выполнения сценария. Это означает, что если Вы попытаетесь при помощи подобной конструкции for($i=1; $i<=100; $i++) { require "$i.php"; } вызвать нужные функции, то получите по носу fatal error-ом

Комментариев нет:

Отправить комментарий