Registra una función PHP como función XPath

# DOMXPath::registerPhpFunctions

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

DOMXPath::registerPhpFunctions — Registra una función PHP como función XPath

### Descripción

public function 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 se retorna ningún valor.

### Errores/Excepciones

- Lanza una ValueError si el nombre de un callback no es válido.
- Levanta una excepción ValueError si `options` contiene una opción inválida.
- Levanta una excepción ValueError si `overrideEncoding` utiliza un codificado desconocido.
- 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";
    }

    ?>

Resultado del ejemplo anterior es 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";
    }

    ?>

Resultado del ejemplo anterior es 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";
    }

    ?>

Resultado del ejemplo anterior es similar a:

    Libros con múltiples autores :
    PHP Basics

### Ver también

- DOMXPath::registerNamespace() - Registra el espacio de nombres con el objeto DOMXPath
- DOMXPath::query() - Evalúa la expresión XPath dada
- DOMXPath::evaluate() - Evalúa una expresión XPath dada y devuelve un resultado tipado si es posible
- XSLTProcessor::registerPHPFunctions() - Activa el uso de PHP en las hojas de estilo XSLT

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open