DOMXPath::registerPhpFunctions

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

DOMXPath::registerPhpFunctionsRegistra funções PHP como funções XPath

Descrição

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

Este método permite o uso de funções PHP dentro de expressões XPath.

Parâmetros

restrict

Use este parâmetro para permitir apenas que certas funções sejam chamadas do XPath.

Este parâmetro pode ser um dos seguintes: uma string (um nome de função), um array indexado de nomes de funções ou um array associativo com chaves nos nomes de funções e valores associados sendo do tipo callable.

Valor Retornado

Nenhum valor é retornado.

Erros/Exceções

  • Lança uma exceção ValueError se um nome de chamada de retorno não for válido.
  • Lança uma exceção ValueError se options contiver uma opção inválida.
  • Lança uma exceção ValueError s overrideEncoding for uma codificação desconhecida.
  • Lança uma exceção TypeError se uma função de retorno informada não for chamável.

Registro de Alterações

Versão Descrição
8.4.0 Nomes de retorno de chamada inválidos agora lançam uma exceção ValueError. Passar uma entrada que não pode ser chamada agora lança uma exceção TypeError.
8.4.0 Agora é possível usar callables para funções de retorno ao usar restrict com entradas de array.

Exemplos

Os exemplos a seguir usam book.xml que contém o seguinte:

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

Exemplo #2 DOMXPath::registerPhpFunctions() com php:functionString

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

$xpath = new DOMXPath($doc);

// Registra o namespace php: (obrigatório)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Registra funções PHP (sem restrições)
$xpath->registerPhpFunctions();

// hama a função substr no título do livro
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');

echo
"Found {$nodes->length} books starting with 'PHP':\n";
foreach (
$nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo
"$title by $author\n";
}

?>

O exemplo acima produzirá algo semelhante a:

Found 2 books starting with 'PHP':
PHP Basics by Jim Smith
PHP Secrets by Jenny Smythe

Exemplo #3 DOMXPath::registerPhpFunctions() com php:function

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

$xpath = new DOMXPath($doc);

// Registra o namespace php: (obrigatório)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Registra funções PHP (apenas has_multiple)
$xpath->registerPhpFunctions("has_multiple");

function
has_multiple($nodes) {
// Retorna true se mais de um autor
return count($nodes) > 1;
}
// Filtra livros com múltiplos autores
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Books with multiple authors:\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

O exemplo acima produzirá algo semelhante a:

Books with multiple authors:
PHP Basics

Exemplo #4 DOMXPath::registerPhpFunctions() com um callable

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

$xpath = new DOMXPath($doc);

// Registra o namespace php: (necessário)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Registra funções PHP (somente has_multiple)
$xpath->registerPhpFunctions(["has_multiple" => fn ($nodes) => count($nodes) > 1]);

// Filtra livros com múltiplos autores
$books = $xpath->query('//book[php:function("has_multiple", author)]');

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

?>

O exemplo acima produzirá algo semelhante a:

Books with multiple authors:
PHP Basics

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top