XSLTProcessor::registerPHPFunctions

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

XSLTProcessor::registerPHPFunctionsРазрешает вызывать PHP-функции как XSLT-функции

Описание

public XSLTProcessor::registerPHPFunctions(array|string|null $functions = null): void

Метод разрешает вызывать PHP-функции как XSLT-функции в таблицах стилей в формате XSL.

Список параметров

functions

Параметр разрешает вызывать из XSLT-структуры только конкретные функции.

Параметр принимает значения следующих типов: string — название функции, array — индексный массив с названиями функций или array — ассоциативный массив с названиями функций в ключах и callable-выражениями в значениях.

Ошибки

  • Метод выбрасывает ошибку ValueError, если название callback-функции недопустимо.
  • Метод выбрасывает ошибку ValueError, если аргумент options содержит недопустимые параметры.
  • Метод выбрасывает ошибку ValueError, если в аргументе overrideEncoding передали неизвестную кодировку.
  • Метод выбрасывает ошибку TypeError, если значение для обратного вызова не принадлежит типу callable.

Возвращаемые значения

Функция не возвращает значения после выполнения.

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

Версия Описание
8.4.0 При передаче недопустимых названий callback-функций метод теперь выбрасывает ошибку ValueError. При передаче значений, которые не принадлежат типу callable, метод теперь выбрасывает ошибку TypeError.
8.4.0 Параметр functions теперь принимает callable-выражения, когда набор callback-функций, доступных для вызова из XSLT-структур, ограничивают путём передачи массива (array).

Примеры

Пример #1 Пример простого вызова PHP-функции из таблицы стилей

<?php

$xml
= <<<EOB
<allusers>
<user>
<uid>bob</uid>
</user>
<user>
<uid>joe</uid>
</user>
</allusers>
EOB;

$xsl = <<<EOB
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="allusers">
<html><body>
<h2>Users</h2>
<table>
<xsl:for-each select="user">
<tr><td>
<xsl:value-of
select="php:function('ucfirst',string(uid))"/>
</td></tr>
</xsl:for-each>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
EOB;

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

$xsldoc = new DOMDocument();
$xsldoc->loadXML($xsl);

$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsldoc);
echo
$proc->transformToXML($xmldoc);

?>

Смотрите также