【PHP8.x】DOMXPath::registerPhpFunctions()メソッドの使い方
registerPhpFunctionsメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
『registerPhpFunctionsメソッドは、XPathクエリ式の中でPHPの関数を呼び出せるように登録する処理を実行するメソッドです。DOMXPathは、XML文書から特定の要素や属性といった一部分(ノード)を効率的に探し出すための検索言語であるXPathを利用するクラスです。通常、XPathクエリでは標準で定義されている関数しか使用できませんが、このメソッドを用いることで、PHPに組み込まれている関数やユーザーが独自に定義した関数をXPathの式の中で利用できるようになります。これにより、PHPが持つ豊富な文字列操作、数値計算、正規表現などの機能を活用して、より複雑で柔軟な条件に基づいたノードの選択が可能になります。引数には、登録したい関数の名前を文字列、または配列で指定します。引数を指定しない場合、全てのPHP関数が登録の対象となりますが、意図しない関数が実行されるリスクを避けるため、セキュリティ上の観点から、使用する関数を明示的に指定することが強く推奨されます。このメソッドは、XPathの能力をPHPの機能で拡張するための強力な手段を提供します。』
構文(syntax)
1<?php 2 3// 検索対象のXMLデータ 4$xmlString = <<<XML 5<books> 6 <book> 7 <title>入門PHP</title> 8 </book> 9 <book> 10 <title>実践JavaScript</title> 11 </book> 12 <book> 13 <title>速習PHPフレームワーク</title> 14 </book> 15</books> 16XML; 17 18// XPath内で使用するカスタムPHP関数を定義 19// この関数は、第一引数の文字列が第二引数の部分文字列を含むかチェックする 20function has_substring(string $haystack, string $needle): bool 21{ 22 return str_contains($haystack, $needle); 23} 24 25// DOMDocumentとDOMXPathを準備 26$doc = new DOMDocument(); 27$doc->loadXML($xmlString); 28$xpath = new DOMXPath($doc); 29 30// 'has_substring' という名前のPHP関数をXPath関数として登録する 31$xpath->registerPhpFunctions('has_substring'); 32 33// 登録した関数をXPathクエリ内で使用して、タイトルに「PHP」を含む要素を検索 34// 構文: php:function('登録した関数名', 引数1, 引数2, ...) 35// '.' は現在のコンテキストノード(この場合はtitle要素のテキスト)を表す 36$query = "//book/title[php:function('has_substring', ., 'PHP')]"; 37$php_books = $xpath->query($query); 38 39// 結果を出力 40foreach ($php_books as $book) { 41 echo $book->nodeValue . PHP_EOL; 42} 43 44?>
引数(parameters)
array|string|null $restrict = null
- array|string|null $restrict: PHP の関数を XPath 式から呼び出す際に、使用を許可する関数名を配列または文字列で指定します。
nullを指定すると、すべての PHP 関数が使用可能になります。
戻り値(return)
戻り値なし
戻り値はありません