| Обработка исключений В PHP5 появился механизм создания обработки исключений, который реализуется с помощью новых ключевых слов try, throw и catch. Благодаря этому нововведению обработка ошибок станет более простой и «аккуратной». Код, в котором может произойти ошибка, заключается в блок try. Для генерации и исключения используется ключевое слово throw. А перехватываются и обрабатываются исключения в блоках catch, которых может быть несколько. Следующий пример демонстрирует использование механизма обработки исключений. Код: <? class MyClass { function Divide($x, $y) { if ($y == 0) { throw new Exception("Cannot divide by zero"); } return $x/$y; } } $Object = new MyClass(); try { $Object->divide(3, 0); } catch (Exception $MyException) { echo $MyException->getMessage() . "<br>\n"; } ?> Вывод: Cannot divide by zero Во втором примере показано, как можно создать свои собственные классы исключений и как их при этом необходимо перехватывать. Код: <? class NewException extends Exception { public $Message; function __construct($Message) { $this->Message = $Message; } } try { throw new NewException("Couldn't connect to database"); } catch (NewException $MyException) { echo "Caught an NewException with problem: $MyException->Message"; } catch (Exception $MyException) { echo "Caught unrecognized exception"; } ?> Вывод: Caught an NewException with problem: Couldn't connect to database В настоящее время в целях обратной совместимости большинство библиотечных функций не использует исключения. Однако все новые расширения будут их поддерживать. Кроме того, можно использовать функцию set_exception_handler(), чтобы перехватить необработанные исключения до завершения работы скрипта. Работа foreach со ссылками В PHP4 нельзя было пройтись по массиву с помощью цикла foreach, изменяя его значения. В PHP5 разрешено использовать этот цикл, используя выбираемые из массива элементы по ссылке, добавив перед соответствующей переменной символ «&». Таким образом, появилась возможность изменять элементы исходного массива, меняя переменную текущего элемента. Код: <? $Array = array(2, 0, 3, 1, 0, 2, 1, 4); echo "Before: " . implode(", ", $Array) . "<br>\n"; foreach ($Array as &$Value) { $Value = ($Value != 0)? 1 : $Value; } echo "After: " . implode(", ", $Array) . "<br>\n"; ?> Вывод: Before: 2, 0, 3, 1, 0, 2, 1, 4 After: 1, 0, 1, 1, 0, 1, 1, 1 Значения по умолчанию, передаваемые по ссылке В PHP4 задать значение по умолчанию можно было только для параметров, которые передаются по значению. В PHP5 появилась возможность установки значений по умолчанию для параметров, передаваемых по ссылке. Код: <? function MyFunction(&$Argument = null) { if ($Argument === null) { echo "Argument is empty"; } } MyFunction(); ?> Вывод: Argument is empty XML и Web Services Поддержка XML в PHP4 базировалась на разнообразных библиотеках XML. Поддержка SAX осуществлялась старой библиотекой Expat, для использования XSLT необходима была библиотека Sablotron, для DOM использовалась более мощная libxml2 – библиотека проекта GNOME. В PHP5 все расширения XML были переписаны, чтобы использовать отличный набор инструментов, предоставляемый libxml2. Это библиотека богатая возможностями, отлично сопровождаемая и эффективно реализующая стандарты XML, предоставляющая передовые возможности технологий XML в PHP. Все вышеупомянутые расширения: SAX, DOM и XSLT теперь используют libxml2, включая такие новые расширения, как SimpleXML и SOAP. SAX SAX является простым интерфейсом API для XML, предназначенным для обеспечения доступа к нужной информации без необходимости самомостоятельного создания специальных синтаксических анализаторов. Новая реализация SAX в PHP5 переведена от использования Expat к libxml2. Хотя новое расширение должно быть совместимо, могут быть некоторые тонкие различия. DOM DOM предоставляет программам доступ к хранящейся в XML-документе информации, как к иерархической объектной модели. Расширение DOM было полностью переписано для PHP5. Теперь оно соответствует рекомендациям W3C. Например, названия функций теперь используют нотацию studlyCaps (присваивание имен со смешанным употреблением заглавных и строчных букв) как предписано по стандарту W3C, Кроме того, новое расширение DOM поддерживает три вида схем для валидации XML документов – DTD, XML Schema и RelaxNG. В результате этих изменений код, написанный для PHP 4 с использованием DOM, не всегда будет выполняться в PHP 5. Однако простая корректировка названий функций к новому стандарту в большинстве случаев должна решить проблему. XSLT XSLT является языком написания сценариев, оптимизированных для преобразования XML-документов. В PHP4, было два расширения, которые поддерживали XSL-преобразования. Первое использовало Sablotron, а второе – поддержку XSLT в расширении DOM. В PHP5 новое расширение XSL основано на использовании библиотеки libxml2. SimpleXML Расширение SimpleXML позволяет представить XML-документ как встроенный объект PHP. Благодаря этому можно читать, писать или организовывать циклы по XML-документу, получать доступ к элементам и атрибутам так же легко, как это осуществляется при работе с массивами PHP. simplexml.xml: <sample> <item id="1"> <val>a</val> <val>b</val> </item> <item id="2"> <val>A</val> <val>B</val> </item> </sample> Код: <? $sample = simplexml_load_file("simplexml.xml"); foreach ($sample->item as $item) { echo $item["id"] . ", " . $item->val[0] . ", " . $item->val[1] . "<br>\n"; } ?> Вывод: 1, a, b 2, A, B В том случае, если есть необходимость сделать что-то, что невозможно выполнить в рамках SimpleXML, можно преобразовать объект SimpleXML в дерево DOM, вызвав функцию dom_import_simplexml(), выполнить необходимое, и вернуться назад к SimpleXML, используя simplexml_import_dom(). SOAP SOAP (Simple Object Access Protocol) – это Простой Объектный Протокол Доступа, позволяющий объектам и web-сервисам взаимодействовать друг с другом в распределенной, децентрализованной web-среде. Приложение, которое хочет работать с некоторым web-сервисом, настраивается на него при помощи WSDL (Web Services Definition Language – язык описания Web-сервисов), который предоставляет низкоуровневую техническую информацию о желаемом сервисе, допускает обращение приложений к информации XML Schema для кодировки данных и гарантирует, что правильные операции будут осуществлены по правильным протоколам. Поддержка SOAP в PHP4 реализовывалась с помощью ряда библиотек, написанных на PHP. Поддержка SOAP в PHP5 была полностью переписана как С-расширение и, хотя на текущий момент находится на последней стадии бета-тестирования, было решено включить в его стандартный дистрибутив, поскольку оно практически полностью реализует стандарт SOAP. Следующий код показывает насколько просто работать с SOAP в PHP5 и демонстрирует вызов функции SomeFunction(), определенной в WSDL-файле. Код: <? $Client = new SoapClient("service.wsdl"); $Client->SomeFunction($a, $b, $c); ?> MySQLi (MySQL Improved) В PHP5 для MySQL было написано новое расширение, которое позволяет полностью использовать преимущества новых функциональных возможностей в MySQL 4.1 и более новых версий. Новые возможности, поддерживаемые этим расширением, включают контроль транзакций, поддержку репликаций и SSL. MySQLi дает возможность использовать для работы с MySQL оба интерфейса: функциональный и объектно-ориентированный. SQLite SQLite – это встроенная библиотека SQL, которая не требует SQL сервера и подходит для приложений, которые не требуют масштабируемых SQL-серверов. Новая библиотека обладает значительным числом возможностей, среди которых поддержка транзакций, вложенные выборки, представления (view) и большие DB-файлы. Все данные одной базы данных SQLite хранятся в одном файле. Следующий фрагмент кода демонстрирует создание такой базы данных и выбор из созданной в ней таблицы помещенного в нее значения. Код: <? if ($Db = sqlite_open("mysqlitedb.msl", 0666, $SqliteError)) { sqlite_query($Db, "create table mytable (field varchar(10))"); sqlite_query($Db, "insert into mytable values ('value')"); $Result = sqlite_query($Db, "select field from mytable"); print_r(sqlite_fetch_array($Result)); } else { die($SqliteError); } ?> Вывод: Array ( [0] => value [field] => value ) Поддержка SQLite появилась еще в PHP 4.3.x, но у библиотеки SQLite в PHP5 появился новый объектно-ориентированный интерфейс и поддержка итераторов. Tidy PHP 5 включает поддержку очень полезной библиотеки Tidy. Она позволяет разбирать, диагностировать, чистить и восстанавливать документы HTML. Tidy расширение поддерживает как функциональный, так и объектно-ориентированный интерфейс, и ее API использует механизм исключений, появившийся в РНР5. Следующий пример демонстрирует восстановление некорректного HTML кода с помощью библиотеки Tidy с использованием функционального интерфейса. Код: <? $Code = "<html>\n" . "<head>\n" . "<title>Title</title>\n" . "</head>\n" . "<body>\n" . "<p>String</i>\n" . "</body>\n" . "</html>"; echo tidy_repair_string($Code); ?> Вывод: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>Title</title> </head> <body> <p>String</p> </body> </html>
Источник: http://dak.mmforce.net |