PHP 8.4.2 Released!

DOMXPath::registerPhpFunctions

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

DOMXPath::registerPhpFunctionsEnregistre une fonction PHP comme fonction XPath

Description

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

Cette méthode active la possibilité d'utiliser des fonctions PHP dans des expressions XPath.

Liste de paramètres

restrict

Utilisez ce paramètre uniquement pour autoriser certaines fonctions à être appelées depuis XPath.

Ce paramètre peut être l'un des éléments suivants : une string (nom de fonction), un array indexé contenant des noms de fonctions, ou un array associatif avec des clés correspondant aux noms de fonctions et des valeurs associées correspondant à des callable.

Valeurs de retour

Aucune valeur n'est retournée.

Historique

Version Description
8.4.0 Il est désormais possible d'utiliser des callables pour des callbacks lors de l'utilisation de restrict avec des entrées de type array.

Exemples

Les exemples suivants utilisent le fichier book.xml qui contient les données suivantes :

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

Exemple #2 Exemple avec DOMXPath::registerPHPFunctions() et php:functionString

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

$xpath = new DOMXPath($doc);

// Enregistre l'espace de noms php (nécessaire)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Enregistre les fonctions PHP (Aucune restriction)
$xpath->registerPHPFunctions();

// Appèle la fonction substr sur le titre du livre
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');

echo
"{$nodes->length} livres trouvés dont le titre commence par 'PHP':\n";
foreach (
$nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo
"$title par $author\n";
}

?>

Résultat de l'exemple ci-dessus est similaire à :

2 livres trouvés dont le titre commence par 'PHP':
PHP Basics par Jim Smith
PHP Secrets par Jenny Smythe

Exemple #3 Exemple avec DOMXPath::registerPHPFunctions() et php:function

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

$xpath = new DOMXPath($doc);

// Enregistre l'espace de noms php (nécessaire)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Enregistre des fonctions PHP (has_multiple uniquement)
$xpath->registerPHPFunctions("has_multiple");

function
has_multiple($nodes) {
// Retourne true s'il y a plus d'un auteur
return count($nodes) > 1;
}
// Filtre les livres dont les auteurs sont multiples
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Livres avec plusieurs auteurs :\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

Résultat de l'exemple ci-dessus est similaire à :

Livres avec plusieurs auteurs :
PHP de base

Exemple #4 DOMXPath::registerPHPFunctions() avec un callable

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

$xpath = new DOMXPath($doc);

// Enregistrer le namespace php: (nécessaire)
$xpath->registerNamespace("php", "http://php.net/xpath");

// Enregistrer les fonctions PHP (uniquement has_multiple)
$xpath->registerPHPFunctions(["has_multiple" => fn ($nodes) => count($nodes) > 1]);

// Filtrer les livres avec plusieurs auteurs
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Livres avec plusieurs auteurs :\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

Résultat de l'exemple ci-dessus est similaire à :

Livres avec plusieurs auteurs :
PHP Basics

Voir aussi

add a note

User Contributed Notes

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