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

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

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

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
 точно определенное место, то 
воспользуйтесь require. В противном случае более удачным выбором будет 
include. 
Инструкции однократного включения 
В больших и непростых сценариях инструкции include и require применяются 
очень и очень часто. Поэтому становится довольно сложно контролировать, как бы 
случайно не включить один и тот же файл несколько раз (что чаще всего приводит 
к 
ошибке). 
Чтобы стало яснее, я расскажу вам притчу. Как-то раз разработчик Билл написал 
не- 
сколько очень полезных функций для работы с файлами Excel и решил объединить их 

в библиотеку — файл xllib.php (листинг 9.7): 
Листинг 9.7. Библиотека xllib.php 
 
Разработчик Вася захотел сделать то же самое для работы с документами Microsoft 

Word, в результате чего на свет явилась библиотека wlib.php. Так как Word и 
Excel 
связаны между собой, Вася использует в своей библиотеке (листинг 9.8) возможно- 

сти, предоставляемые библиотекой xllib.php — подключает ее командой require: 
Листинг 9.8. Библиотека wlib.php 
 
Эти две библиотеки стали настолько популярны в среде Web-программистов, что 
скоро все стали их внедрять в свои программы. При этом, конечно же, никому нет 
дела до того, как эти библиотеки на самом деле устроены — все просто подключают 


Глава 9. Конструкции языка 165 
их к своим сценариям при помощи require, не задумываясь о возможных последст- 
виях. 
Но в один прекрасный день одному неизвестному программисту потребовалось рабо- 
тать и с документами Word, и с документами Excel. Он, не долго думая, подключил 
к 
своему сценарию обе эти библиотеки (листинг 9.9): 
Листинг 9.9. Подключение библиотек xllib.php и wlib.php 
 
Каково же было его удивление, когда при запуске этого сценария он получил 
сообще- 
ние об ошибке, в котором говорилось, что в файле xlib.php функция LoadXlDoc() 
определена дважды!.. 
Что же произошло? Нетрудно догадаться, если проследить за тем, как транслятор 
PHP 
"разворачивает" код листинга 9.9. Вот как это происходит: 
//require "wlib.php"; 
//require "xllib.php"; 
Function LoadXlDocument($filename) { . . . } 
Function SaveXlDocument($filename,$doc) { . . . } 
Function LoadWDocument($filename) { . . . } 
Function SaveWDocument($filename,$doc) { . . . } 
//require "xllib.php"; 
Function LoadXlDocument($filename) { . . . } 
Function SaveXlDocument($filename,$doc) { . . . } 
$wd=LoadWDocument("document.doc"); 
$xd=LoadXlDocument("document.xls"); 
Как видим, файл xllib.php был включен в текст сценария дважды: первый раз кос- 
венно через wlib.php, и второй раз — непосредственно из программы. Поэтому 
транслятор, дойдя до выделенной строки, обнаружил, что функция 
LoadXlDocument() определяется второй раз, на что честно и прореагировал. 
Конечно, разработчик сценария мог бы исследовать исходный текст библиотеки 
wlib.php и понять, что во второй раз xllib.php включать не нужно. Но согласи- 
тесь — это не выход. Действительно, при косвенном подключении файлов третьего и 

выше уровней вполне могут возникнуть ситуации, когда без модификации кода биб- 
лиотек будет уже не обойтись. А это недопустимо. Как же быть? 

Часть III. Основы языка PHP 166 
Что ж, после столь длительного вступления (возможно, слишком длите
 
<<-[Весь Текст]
Страница: из 287
 <<-