(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DOMXPath::registerPhpFunctions â Enregistre une fonction PHP comme fonction XPath
Cette méthode active la possibilité d'utiliser des fonctions PHP dans des expressions XPath.
restrictUtiliser 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.
Aucune valeur n'est retournée.
Lance une ValueError si le nom d'une fonction de rappel n'est pas valide.
LĂšve une exception ValueError si
options contient une option invalide.
LĂšve une exception ValueError si
overrideEncoding utilise un encodage inconnu.
Lance une TypeError si une fonction de rappel donnée n'est pas appelable.
| Version | Description |
|---|---|
| 8.4.0 | Les noms de fonction de rappel invalides lancent maintenant une ValueError. Passer une entrée non appelable lance maintenant une TypeError. |
| 8.4.0 |
Il est désormais possible d'utiliser des callables pour des fonctions de rappel
lors de l'utilisation de restrict avec des entrées de type array.
|
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('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Enregistre le namespace php (nécessaire)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Enregistre les fonctions PHP (Aucune restriction)
$xpath->registerPhpFunctions();
// Appelle 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('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Enregistre le namespace 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 Basics
Exemple #4 DOMXPath::registerPhpFunctions() avec un callable
<?php
$doc = new DOMDocument;
$doc->load('examples/book-simple.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