Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ру и верстальщику (которые о PHP 
имеют слабое представление). О том, как же быть в этой ситуации, я расскажу 
позже 
в пятой части книги, в главе, посвященной технике разделения кода и шаблонов. 
Инструкция include 
Эта инструкция практически идентична require, за исключением того, что вклю- 
чаемый файл вставляется "в сердце" нашего сценария не перед его выполнением, а 
прямо во время. 
Какая разница? Поясню. Пусть у нас есть 10 текстовых файлов с именами 
file0.php, file1.php и так далее до file9.php, содержимое которых просто де- 
сятичные цифры 0, 1 ...… 9 (по одной цифре в каждом файле). Запустим такую про- 

грамму: 

Глава 9. Конструкции языка 163 
for($i=0; $i<10; $i++) { 
include "file$i.php"; 
} 
В результате мы получим вывод, состоящий из 10 цифр: "0123456789". Из этого мы 
можем заключить, что каждый из наших файлов был включен по одному разу прямо 
во время выполнения цикла! (Попробуйте теперь вместо include подставить 
require. Сравните результат.) 
Вы, должно быть, обратили внимание на, казалось бы, лишние фигурные скобки во- 
круг include. Попробуйте их убрать. Вы тут же можете получить совершенно бес- 
толковое сообщение об ошибке (или, еще хуже, программа начнет неправильно рабо- 

тать, а причину разыскать будет нелегко). Почему так происходит? Да потому, что 

include не является на самом деле оператором в привычном нам смысле этого сло- 
ва. Чтобы это понять, представьте, что каждый раз, когда интерпретатор 
встречает 
инструкцию include, он просто "в лоб" заменяет ее на содержимое файла, 
указанно- 
го в параметре. 
А вдруг в этом файле несколько команд? Тогда в цикле выполнится только первая 
из 
них, а остальные будут запущены уже после окончания цикла. Так что общее 
правило 
гласит: всегда обрамляйте инструкцию include фигурными скобками, если разме- 
щаете ее внутри какой-либо конструкции. 
В будущих версиях разработчики PHP, возможно, и исправят положение к луч- 
шему, однако не советую вам рассчитывать на это. 
Трансляция и проблемы с include 
Как мы знаем, перед исполнением PHP транслирует программу во внутреннее пред- 
ставление. Это означает, что в памяти создается как бы "полуфабрикат", из 
которого 
исключены все комментарии, лишние пробелы, некоторые имена переменных и т. д. 
Впоследствии это внутреннее представление интерпретируется (выполняется). 
Однако 
мы знаем также, что в программе могут встретиться такие места, "подводные 
камни" 
для интерпретатора, которые PHP не сможет оттранслировать заранее. В этом 
случае 
он их пропускает, "откладывает на потом", чтобы в момент, когда управление 
дойдет 
до определенной точки, опять запустить транслятор. 
Одним из таких "камней" как раз и является инструкция include. Как только 
управ- 
ление программы доходит до нее, PHP вынужден приостановиться и ждать, пока 
транслятор не оттранслирует код включаемого файла. А это достаточно 
отрицательно 
сказывается на быстродействии программы, особенно большой. Поэтому, если вы 
пишете большой и сложный сценарий, применяйте инструкцию require вместо 
include, где только можно. 
В пользу последнего говорит также и перспектива появления в будущем компилятора 

для PHP, который будет уметь сохранять оттранслированный код в исполняемые 

Часть III. Основы языка PHP 164 
файлы (нечто подобное уже существует для программ на Perl). Если вы будете ис- 
пользовать include, то PHP никак не сможет определить во время компиляции, ка- 
кие файлы вы собираетесь подключить в программе, поэтому в исполняемый файл их 
код не войдет. 
Что же оптимальнее — require или include? Если вы точно уверены, что опреде- 
ленный файл нужно присоединить ровно один раз и 
 
<<-[Весь Текст]
Страница: из 287
 <<-