Enregistre une fonction PHP en tant que fonction XPath dans un espace de noms

# DOMXPath::registerPhpFunctionNS

(PHP >= 8.4.0)

DOMXPath::registerPhpFunctionNS — Enregistre une fonction PHP en tant que fonction XPath dans un espace de noms

### Description

public function DOMXPath::registerPhpFunctionNS(string `$namespaceURI`, string `$name`, callable `$callable`): void

Cette méthode permet d'utiliser une fonction PHP en tant que fonction XPath dans les expressions XPath.

### Liste de paramètres

`namespaceURI`
  L'URI du namespace.
`name`
  La fonction locale à l'intérieur du namespace.
`callable`
  La fonction PHP à appeler lorsque la fonction XPath est appelée dans l'expression XPath. Lorsqu'une liste de nœuds est passée en paramètre à la fonction de rappel, l'argument devient un tableau contenant les nœuds DOM correspondants.

### Erreurs / Exceptions

- 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.

### Valeurs de retour

Aucune valeur n'est retournée.

### Exemples

Exemple #1 Enregistre une fonction XPath dans un espace de noms et l'appelle depuis l'expression XPath

    <?php

    $xml = <<<EOB
    <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>
    EOB;

    $doc = new DOMDocument();
    $doc->loadXML($xml);

    $xpath = new DOMXPath($doc);

    // Enregistre le namespace my: (obligatoire)
    $xpath->registerNamespace("my", "urn:my.ns");

    // Enregistre les fonctions PHP
    $xpath->registerPhpFunctionNS(
        'urn:my.ns',
        'substring',
        fn (array $arg1, int $start, int $length) => substr($arg1[0]->textContent, $start, $length)
    );

    // Appel de la fonction substr sur le titre du livre
    $nodes = $xpath->query('//book[my:substring(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

### Voir aussi

- DOMXPath::registerNamespace() - Enregistre le namespace avec l'objet DOMXPath
- DOMXPath::query() - Évalue l'expression XPath donnée
- DOMXPath::evaluate() - Évalue une expression XPath donnée et retourne un résultat typé si possible
- XSLTProcessor::registerPHPFunctions() - Active l'utilisation de PHP dans les feuilles de styles XSLT
- XSLTProcessor::registerPHPFunctionNS() - Enregistre une fonction PHP en tant que fonction XSLT dans un espace de noms

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open