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

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

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ужно было бы переписать следующим образом: 

Часть IV. Стандартные функции PHP 338 
$filename='/path/to/data-file'; 
($file=fopen($filename, 'r')) || die("не могу открыть файл $filename!"); 
Согласитесь, последнее практически полностью исключает возможность применения 
|| в подобных конструкциях. 
Финализаторы 
Слава богу, разработчики PHP предусмотрели возможность указать в программе 
функцию-финализатор, которая будет автоматически вызвана, как только работа 
сце- 
нария завершится — неважно, из-за ошибки или легально. В такой функции мы мо- 
жем, например, записать информацию в кэш или обновить какой-нибудь файл жур- 
нала работы программы. Что же нужно для этого сделать? 
Во-первых, написать саму функцию и дать ей любое имя. Желательно также, чтобы 
она была небольшой, и чтобы в ней не было ошибок, потому что сама функция, 
впол- 
не возможно, будет вызываться перед завершением сценария из-за ошибки. Во- 
вторых зарегистрировать ее как финализатор, передав ее имя стандартной функции 
Register_shutdown_function(). 
int Register_shutdown_function(string $func) 
Регистрирует функцию с указанным именем с той целью, чтобы она автоматически 
вызывалась перед возвратом из сценария. Функция будет вызвана как при окончании 

программы, так и при вызовах exit() или die(), а также при фатальных ошибках, 
приводящих к завершению сценария — например, при синтаксической ошибке. 
Конечно, можно зарегистрировать несколько финальных функций, которые будут 
вызываться в том же порядке, в котором они регистрировались. 
Правда, есть одно "но". Финальная функция вызывается уже после закрытия 
соедине- 
ния с браузером клиента. Поэтому все данные, выведенные в ней через echo, 
теряют- 
ся (во всяком случае, так происходит в Unix-версии PHP, а под Windows 
CGI-версия 
PHP и echo работают прекрасно). Так что лучше не выводить никаких данных в та- 
кой функции, а ограничиться работой с файлами и другими вызовами, которые ниче- 

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

каким-то причинам прервался из-за ошибки. Вообще говоря, надо заметить, что в 
PHP никак нельзя в случае ошибки в некотором запущенном коде проделать какие- 
либо разумные действия (кроме, разумеется, мгновенного выхода). Это несколько 
может ограничивать область применимости PHP для написания шаблонизатора (о 
шаблонах будет подробно рассказано в части V этой книги). 

Глава 24. Управление интерпретатором 339 
Генерация кода 
во время выполнения 
Так как PHP в действительности является транслирующим интерпретатором, в нем 
заложены возможности по созданию и выполнению кода программы прямо во время 
ее выполнения. То есть мы можем писать сценарии, которые в буквальном смысле 
создают сами себя, точнее, свой код! Это незаменимо при написании 
шаблонизаторов 
и функций, занимающихся динамическим формированием писем. Мы поговорим о 
таких функциях в части V книги. 
Выполнение кода 
int eval(string $code) 
Эта функция делает довольно интересную вещь: она берет параметр $st и, рассмат- 

ривая его как код программы на PHP, запускает. Если этот код возвратил какое-то 

знач
 
<<-[Весь Текст]
Страница: из 287
 <<-