DOMXPath::registerPhpFunctions
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Register PHP functions as XPath functions
Description
This method enables the ability to use PHP functions within XPath expressions.
Parameters
restrictUse this parameter to only allow certain functions to be called from XPath.
This parameter can be one of the following: a
string(a function name), an indexedarrayof function names, or an associativearraywith keys being the function name and the associated value being thecallable.
Return Values
Void
Errors/Exceptions
- Throws a
ValueErrorif a callback name is not valid. - Throws a
TypeErrorif a given callback is not callable.
Changelog
| Version | Description |
|---|---|
| 8.4.0 | Invalid callback names now throws a ValueError. Passing a non-callable entry now throws a TypeError. |
| 8.4.0 | It is now possible to use callables for callbacks when using restrict with array entries. |
Examples
The following examples use book.xml which contains the following:
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>DOMXPath::registerPhpFunctions with php:functionString
<?php
$doc = new DOMDocument;
$doc->load('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Register the php: namespace (required)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Register PHP functions (no restrictions)
$xpath->registerPhpFunctions();
// Call substr function on the book title
$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";
}
?>The above example will output something similar to:
Found 2 books starting with 'PHP':
PHP Basics by Jim Smith
PHP Secrets by Jenny SmytheDOMXPath::registerPhpFunctions with php:function
<?php
$doc = new DOMDocument;
$doc->load('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Register the php: namespace (required)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Register PHP functions (has_multiple only)
$xpath->registerPhpFunctions("has_multiple");
function has_multiple($nodes) {
// Return true if more than one author
return count($nodes) > 1;
}
// Filter books with multiple authors
$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";
}
?>The above example will output something similar to:
Books with multiple authors:
PHP BasicsDOMXPath::registerPhpFunctions with a callable
<?php
$doc = new DOMDocument;
$doc->load('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Register the php: namespace (required)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Register PHP functions (has_multiple only)
$xpath->registerPhpFunctions(["has_multiple" => fn ($nodes) => count($nodes) > 1]);
// Filter books with multiple authors
$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";
}
?>The above example will output something similar to:
Books with multiple authors:
PHP BasicsSee Also
DOMXPath::registerNamespaceDOMXPath::queryDOMXPath::evaluateXSLTProcessor::registerPHPFunctions