САМОУЧИТЕЛЬ PHP 4



         

Конструкции языка - часть 14


Листинг 9.8. Библиотека wlib.php

<?

require "xllib.php";

Function LoadWDocument($filename) { . . . }

Function SaveWDocument($filename,$doc) { . . . }

?>

Эти две библиотеки стали настолько популярны в среде Web-програм­мистов, что скоро все стали их внедрять в свои программы. При этом, конечно же, никому нет дела до того, как эти библиотеки на самом деле устроены — все просто подключают их к своим сценариям при помощи require, не задумываясь о возможных последствиях.

Но в один прекрасный день одному неизвестному программисту потребовалось работать и с документами Word, и с документами Excel. Он, не долго думая, подключил к своему сценарию обе эти библиотеки (листинг 9.9):

Листинг 9.9. Подключение библиотек xllib.php

и wlib.php[E4] 

<?

require "wlib.php";

require "xllib.php";

$wd=LoadWDocument("document.doc");

$xd=LoadXlDocument("document.xls");

?>

Каково же было его удивление, когда при запуске этого сценария он получил сообщение об ошибке, в котором говорилось, что в файле 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() определяется второй раз, на что честно и прореагировал.




Содержание  Назад  Вперед