DOMXPath::registerPhpFunctions

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DOMXPath::registerPhpFunctions Регистрирует PHP-функции как XPath-функции

Описание

public DOMXPath::registerPhpFunctions(string|array|null $restrict = null): void

Метод разрешает вызывать PHP-функции в XPath-выражениях.

Список параметров

restrict

Параметр разрешает вызывать в XPath-выражениях только конкретные функции.

Параметр принимает значения следующих типов: string — название функции, array — индексный массив с названиями функций или array — ассоциативный массив с названиями функций в ключах и callable-выражениями в значениях.

Возвращаемые значения

Функция не возвращает значения после выполнения.

Ошибки

  • Метод выбрасывает ошибку ValueError, если название callback-функции недопустимо.
  • Метод выбрасывает ошибку ValueError, если аргумент options содержит недопустимые параметры.
  • Метод выбрасывает ошибку ValueError, если в аргументе overrideEncoding передали неизвестную кодировку.
  • Метод выбрасывает ошибку TypeError, если значение для обратного вызова не принадлежит типу callable.

Список изменений

Версия Описание
8.4.0 При передаче недопустимых названий callback-функций метод теперь выбрасывает ошибку ValueError. При передаче значений, которые не принадлежат типу callable, метод теперь выбрасывает ошибку TypeError.
8.4.0 Параметр restrict теперь принимает callable-выражения, когда набор callback-функций, доступных для вызова из XPath-выражений, ограничивают путём передачи массива (array).

Примеры

Примеры на этой странице работают с файлом book.xml, который содержит следующее:

Пример #1 book.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
 <book>
  <title>PHP Basics</title>
  <author>Jim Smith</author>
  <author>Jane Smith</author>
 </book>
 <book>
  <title>PHP Secrets</title>
  <author>Jenny Smythe</author>
 </book>
 <book>
  <title>XML basics</title>
  <author>Joe Black</author>
 </book>
</books>

Пример #2 Пример регистрации PHP-функции как XPath-функции методом DOMXPath::registerPhpFunctions() и вызова функции через синтаксис php:functionString

<?php

$doc
= new DOMDocument();
$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// Обязательная регистрация пространства имён с префиксом 'php'
$xpath->registerNamespace("php", "http://php.net/xpath");

// Регистрация PHP-функций без установки ограничений
$xpath->registerPhpFunctions();

// Вызов функции substr на названии книги
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');

echo
"Метод нашёл {$nodes->length} книги, название которых начинается с 'PHP':\n";
foreach (
$nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo
"$title автора $author\n";
}

?>

Вывод приведённого примера будет похож на:

Метод нашёл 2 книги, название которых начинается с 'PHP':
PHP Basics автора Jim Smith
PHP Secrets автора Jenny Smythe

Пример #3 Пример регистрации PHP-функции как XPath-функции методом DOMXPath::registerPhpFunctions() и вызова функции через синтаксис php:function

<?php

$doc
= new DOMDocument();
$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// Обязательная регистрация пространства имён с префиксом 'php'
$xpath->registerNamespace("php", "http://php.net/xpath");

// Регистрация PHP-функций с установкой ограничения только на доступ к функции has_multiple
$xpath->registerPhpFunctions("has_multiple");

function
has_multiple($nodes) {
// Функция возвращает true, если список узлов содержит больше одного автора
return count($nodes) > 1;
}
// Фильтрация книг, которые вышли в соавторстве
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Книги, которые написали два или больше автора:\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

Вывод приведённого примера будет похож на:

Книги, которые написали два или больше автора:
PHP Basics

Пример #4 Пример регистрации анонимной PHP-функции как XPath-функции методом DOMXPath::registerPhpFunctions() с установкой ограничения через массив callable-значений

<?php

$doc
= new DOMDocument();
$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// Обязательная регистрация пространства имён с префиксом 'php'
$xpath->registerNamespace("php", "http://php.net/xpath");

// Регистрация PHP-функций с установкой ограничения только на доступ к функции has_multiple
$xpath->registerPhpFunctions(["has_multiple" => fn ($nodes) => count($nodes) > 1]);

// Фильтрация книг, которые вышли в соавторстве
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Книги, которые написали два или больше автора:\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

Вывод приведённого примера будет похож на:

Книги, которые написали два или больше автора:
PHP Basics

Смотрите также

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top