DOMXPath::registerPhpFunctions

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

DOMXPath::registerPhpFunctions β€” РСгистрируСт PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ОписаниС

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

ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² XPath-выраТСниях.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

restrict

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² XPath-выраТСниях Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²: string β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, array β€” индСксный массив с названиями Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ array β€” ассоциативный массив с названиями Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΊΠ»ΡŽΡ‡Π°Ρ… ΠΈ callable-выраТСниями Π² значСниях.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Ѐункция Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния послС выполнСния.

Ошибки

  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π½Π°Π·Π²Π°Π½ΠΈΠ΅ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСдопустимо.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ options содСрТит нСдопустимыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError, Ссли Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ overrideEncoding ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡƒ callable.

Бписок измСнСний

ВСрсия ОписаниС
8.4.0 ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ нСдопустимых Π½Π°Π·Π²Π°Π½ΠΈΠΉ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ ValueError. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Ρ‚ΠΈΠΏΡƒ callable, ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выбрасываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ TypeError.
8.4.0 ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ restrict Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ callable-выраТСния, ΠΊΠΎΠ³Π΄Π° Π½Π°Π±ΠΎΡ€ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, доступных для Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ массива (array).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° этой страницС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ„Π°ΠΉΠ»ΠΎΠΌ book.xml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #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>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ рСгистрации PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ DOMXPath::registerPhpFunctions() ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· синтаксис php:functionString

<?php

$doc
= new DOMDocument();
$doc->load('examples/book-simple.xml');

$xpath = new DOMXPath($doc);

// ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ рСгистрация пространства ΠΈΠΌΡ‘Π½ с прСфиксом 'php'
$xpath->registerNamespace("php", "http://php.net/xpath");

// РСгистрация PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Π΅Π· установки ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ
$xpath->registerPhpFunctions();

// Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ substr Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');

echo
"ΠœΠ΅Ρ‚ΠΎΠ΄ Π½Π°ΡˆΡ‘Π» {$nodes->length} ΠΊΠ½ΠΈΠ³ΠΈ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с 'PHP':\n";
foreach (
$nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo
"$title Π°Π²Ρ‚ΠΎΡ€Π° $author\n";
}

?>

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π°:

ΠœΠ΅Ρ‚ΠΎΠ΄ Π½Π°ΡˆΡ‘Π» 2 ΠΊΠ½ΠΈΠ³ΠΈ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с 'PHP':
PHP Basics Π°Π²Ρ‚ΠΎΡ€Π° Jim Smith
PHP Secrets Π°Π²Ρ‚ΠΎΡ€Π° Jenny Smythe

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #3 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ рСгистрации PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ DOMXPath::registerPhpFunctions() ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· синтаксис php:function

<?php

$doc
= new DOMDocument();
$doc->load('examples/book-simple.xml');

$xpath = new DOMXPath($doc);

// ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ рСгистрация пространства ΠΈΠΌΡ‘Π½ с прСфиксом 'php'
$xpath->registerNamespace("php", "http://php.net/xpath");

// РСгистрация PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с установкой ограничСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° доступ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ has_multiple
$xpath->registerPhpFunctions("has_multiple");

function
has_multiple($nodes) {
// Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли список ΡƒΠ·Π»ΠΎΠ² содСрТит большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΡ€Π°
return count($nodes) > 1;
}
// Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΊΠ½ΠΈΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΡˆΠ»ΠΈ Π² соавторствС
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Книги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ написали Π΄Π²Π° ΠΈΠ»ΠΈ большС Π°Π²Ρ‚ΠΎΡ€Π°:\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π°:

Книги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ написали Π΄Π²Π° ΠΈΠ»ΠΈ большС Π°Π²Ρ‚ΠΎΡ€Π°:
PHP Basics

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #4 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ рСгистрации Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ XPath-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ DOMXPath::registerPhpFunctions() с установкой ограничСния Ρ‡Π΅Ρ€Π΅Π· массив callable-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

<?php

$doc
= new DOMDocument();
$doc->load('examples/book-simple.xml');

$xpath = new DOMXPath($doc);

// ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ рСгистрация пространства ΠΈΠΌΡ‘Π½ с прСфиксом 'php'
$xpath->registerNamespace("php", "http://php.net/xpath");

// РСгистрация PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с установкой ограничСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° доступ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ has_multiple
$xpath->registerPhpFunctions(["has_multiple" => fn ($nodes) => count($nodes) > 1]);

// Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΊΠ½ΠΈΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΡˆΠ»ΠΈ Π² соавторствС
$books = $xpath->query('//book[php:function("has_multiple", author)]');

echo
"Книги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ написали Π΄Π²Π° ΠΈΠ»ΠΈ большС Π°Π²Ρ‚ΠΎΡ€Π°:\n";
foreach (
$books as $book) {
echo
$book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}

?>

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π°:

Книги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ написали Π΄Π²Π° ΠΈΠ»ΠΈ большС Π°Π²Ρ‚ΠΎΡ€Π°:
PHP Basics

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • DOMXPath::registerNamespace() - РСгистрируСт пространство ΠΈΠΌΡ‘Π½ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ DOMXPath
  • DOMXPath::query() - ВычисляСт XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
  • DOMXPath::evaluate() - ВычисляСт XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ
  • XSLTProcessor::registerPHPFunctions() - Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ XSLT-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы