редактироватьЭто не общий вопрос о неопределенной переменной, а об этом конкретном примере кода, который извлекает переменную без указания откуда.
Я пытаюсь настроить белый список тегов HTML, как описано Вот с помощью S9e \ TextFormatter.
Вот мой код:
use s9e\TextFormatter\Configurator;
function htmlFormat( )
{
$configurator = new Configurator;
$configurator->plugins->load( 'HTMLElements' );
$configurator->HTMLElements->allowElement( 'b' );
$configurator->HTMLElements->allowAttribute( 'b', 'class' );
$configurator->HTMLElements->allowElement( 'i' );
// Get an instance of the parser and the renderer
extract( $configurator->finalize() );
$text = '<b>Bold</b> and <i>italic</i> are allowed, but only <b class="important">bold</b> can use the "class" attribute, not <i class="important">italic</i>.';
$xml = $parser->parse( $text );
$html = $renderer->render( $xml );
}
htmlFormat();
Однако переменные $parser
а также $renderer
никогда не определяются в этом примере кода. Я не знаю, как интегрировать их в этот код, не так ли?
Эта линия
extract( $configurator->finalize() );
определяет эти переменные. Это потому что экстракт () будут «Импортировать переменные в текущую таблицу символов из массива«1 (ссылаясь на пример документации PHP может помочь в понимании этого). Посмотрите на докблок для Конфигуратор :: завершить ():
/** * Finalize this configuration and return all the relevant objects * * Options: (also see addHTMLRules() options) * * - addHTML5Rules: whether to call addHTML5Rules() * - finalizeParser: callback executed after the parser is created (gets the parser as arg) * - finalizeRenderer: same with the renderer * - optimizeConfig: whether to optimize the parser's config using references * - returnParser: whether to return an instance of Parser in the "parser" key * - returnRenderer: whether to return an instance of Renderer in the "renderer" key * * @param array $options * @return array One "parser" element and one "renderer" element unless specified otherwise */
Эти два последних варианта (returnParser а также returnRenderer) по умолчанию true.
Попробуйте запустить эти строки (после настройки экземпляра Configurator):
extract( $configurator->finalize() );
echo 'typeof $parser: '.get_class($parser).'<br>';
echo 'typeof $renderer: '.get_class($renderer).'<br>';
Это должно привести к этому тексту:
typeof $ parser: s9e \ TextFormatter \ Parser
typeof $ renderer: s9e \ TextFormatter \ Renderers \ XSLT
2https://github.com/s9e/TextFormatter/blob/master/src/Configurator.php#L223
Других решений пока нет …