PHP 8.4.6 Released!

DOMXPath::registerPhpFunctions

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

DOMXPath::registerPhpFunctionsRegistra una función PHP como función XPath

Descripción

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

Este método activa la posibilidad de utilizar funciones PHP en expresiones XPath.

Parámetros

restrict

Utilice este parámetro únicamente para autorizar ciertas funciones a ser llamadas desde XPath.

Este parámetro puede ser uno de los siguientes elementos: un string (nombre de función), un array indexado conteniendo nombres de funciones, o un array asociativo con claves correspondientes a nombres de funciones y valores asociados correspondientes a callable.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

  • Lanza una ValueError si el nombre de un callback no es válido.
  • Throws a ValueError if options contains an invalid option.
  • Throws a ValueError if overrideEncoding is an unknown encoding.
  • Lanza una TypeError si un callback dado no es llamable.

Historial de cambios

Versión Descripción
8.4.0 Los nombres de callback inválidos ahora lanzan una ValueError. Pasar una entrada no llamable ahora lanza una TypeError.
8.4.0 Ahora es posible utilizar callables para callbacks al utilizar restrict con entradas de tipo array.

Ejemplos

Los siguientes ejemplos utilizan el fichero book.xml que contiene los siguientes datos:

Ejemplo #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>

Ejemplo #2 DOMXPath::registerPhpFunctions() con php:function

<?php
$doc
= new DOMDocument;
$doc->load('examples/book-simple.xml');

$xpath = new DOMXPath($doc);

// Registra el espacio de nombres php (necesario)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Registra las funciones PHP (Sin restricciones)
$xpath->registerPhpFunctions();

// Llama a la función substr en el título del libro
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');

echo
"{$nodes->length} libros encontrados cuyo título comienza con 'PHP':\n";
foreach (
$nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo
"$title por $author\n";
}

?>

El resultado del ejemplo sería algo similar a:

2 libros encontrados cuyo título comienza con 'PHP':
PHP Basics por Jim Smith
PHP Secrets por Jenny Smythe

Ejemplo #3 Ejemplo con DOMXPath::registerPhpFunctions() y php:function

<?php
$doc
= new DOMDocument;
$doc->load('examples/book-simple.xml');

$xpath = new DOMXPath($doc);

// Registra el espacio de nombres php (necesario)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Registra funciones PHP (solo has_multiple)
$xpath->registerPhpFunctions("has_multiple");

function
has_multiple($nodes) {
// Retorna true si hay más de un autor
return count($nodes) > 1;
}
// Filtra los libros cuyos autores son múltiples
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Libros con múltiples autores :\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

El resultado del ejemplo sería algo similar a:

Libros con múltiples autores :
PHP Basics

Ejemplo #4 DOMXPath::registerPhpFunctions() con un callable

<?php
$doc
= new DOMDocument;
$doc->load('examples/book-simple.xml');

$xpath = new DOMXPath($doc);

// Registrar el namespace php: (necesario)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Registrar las funciones PHP (solo has_multiple)
$xpath->registerPhpFunctions(["has_multiple" => fn ($nodes) => count($nodes) > 1]);

// Filtrar los libros con múltiples autores
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Libros con múltiples autores :\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

El resultado del ejemplo sería algo similar a:

Libros con múltiples autores :
PHP Basics

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top