Перейти к содержимому

xml_set_default_handler()

⚠️ Устарело: Эта функция устарела начиная с PHP 8.0.0. Расширение Expat XML Parser считается устаревшим. Для современной разработки на PHP рекомендуется использовать DOMDocument или SimpleXML.

Функция xml_set_default_handler() является встроенной функцией PHP, входящей в состав расширения Expat XML Parser. Она устанавливает пользовательскую функцию в качестве обработчика по умолчанию для символьных данных, которые не перехватываются функцией xml_set_character_data_handler(). Это полезно, когда необходимо обработать исходный текстовый контент XML без определения конкретного обработчика символьных данных.

Синтаксис

Синтаксис функции xml_set_default_handler() выглядит следующим образом:

php
xml_set_default_handler(resource $parser, callable $handler): bool

Где $parser — это ресурс парсера XML, созданный функцией xml_parser_create(), а $handler — имя пользовательской функции, которая будет обрабатывать символьные данные XML. Функция возвращает true при успехе или false при ошибке.

Примеры использования

Рассмотрим практический пример использования xml_set_default_handler() в PHP.

Пример: Установка функции-обработчика по умолчанию

Предположим, у вас есть строка XML, которую нужно распарсить с помощью парсера Expat XML Parser. Вы можете использовать xml_parser_create() для создания нового парсера, установить обработчик по умолчанию, а затем распарсить данные:

Установка функции-обработчика по умолчанию в PHP

php
function handle_default($parser, $data) {
    echo "Default handler received: " . trim($data) . "\n";
}

$xml_parser = xml_parser_create();
xml_set_default_handler($xml_parser, "handle_default");

$xml_data = "<root>Hello World</root>";
if (xml_parse($xml_parser, $xml_data, true) === false) {
    echo "Parse error: " . xml_error_string(xml_get_error_code($xml_parser)) . "\n";
}
xml_parser_free($xml_parser);

Этот код создает парсер Expat с помощью xml_parser_create(). Затем он устанавливает функцию handle_default() для перехвата символьных данных, которые не обрабатываются xml_set_character_data_handler(). Функция xml_parse() обрабатывает строку XML, вызывая обработчик по умолчанию для текстового содержимого. Добавленная проверка ошибок использует xml_get_error_code() и xml_error_string() для перехвата и вывода любых сбоев при разборе. Наконец, xml_parser_free() освобождает ресурс парсера.

Заключение

В этой статье мы обсудили функцию PHP xml_set_default_handler() и принцип её работы с расширением Expat XML Parser. Мы объяснили её синтаксис, прояснили её роль в обработке символьных данных и привели полный пример с обработкой ошибок. Обратите внимание, что расширение Expat считается устаревшим и официально устарело начиная с PHP 8.0.0. Используя xml_set_default_handler(), вы можете эффективно обрабатывать исходный текстовый контент XML в своих приложениях на PHP, хотя для современных проектов лучше предпочесть DOMDocument или SimpleXML.

Практика

Что делает функция установки обработчика по умолчанию для XML в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.