неопределенная переменная $ parser с использованием s9e \ TextFormatter

редактироватьЭто не общий вопрос о неопределенной переменной, а об этом конкретном примере кода, который извлекает переменную без указания откуда.

Я пытаюсь настроить белый список тегов 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 никогда не определяются в этом примере кода. Я не знаю, как интегрировать их в этот код, не так ли?

1

Решение

Эта линия

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
*/

2

Эти два последних варианта (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


1http://php.net/extract

2https://github.com/s9e/TextFormatter/blob/master/src/Configurator.php#L223

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]