使用 s9e\TextFormatter 的未定义变量 $parser
Posted
技术标签:
【中文标题】使用 s9e\\TextFormatter 的未定义变量 $parser【英文标题】:undefined variable $parser using s9e\TextFormatter使用 s9e\TextFormatter 的未定义变量 $parser 【发布时间】:2017-04-11 15:38:09 【问题描述】:编辑:这不是关于未定义变量的一般问题,而是关于这个特定的代码示例,它在没有指定从哪里提取变量的情况下。
我正在尝试使用 s9e\TextFormatter 设置标签的 html 白名单,如 here 所记录的那样。
这是我的代码:
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
从未在该示例代码中定义。我不知道如何将它们集成到这段代码中,是吗?
【问题讨论】:
$parser
& $renderer
可以是任何东西。或许查看你复制它的代码以了解这些变量的真正含义。
php: "Notice: Undefined variable", "Notice: Undefined index", and "Notice: Undefined offset"的可能重复
这不是关于未定义变量的一般问题,而是关于这个特定脚本的问题。
查看this example $parser
显然是由第59 行对extract() 的调用定义的
您是否在 IDE/输出中看到错误或只是注意到它们未定义?
【参考方案1】:
这一行
extract( $configurator->finalize() );
定义这些变量。这是因为extract() 将“将变量从数组导入当前符号表”1(参考the PHP documentation example 可能有助于理解这一点)。查看Configurator::finalize()的文档块:
/** * 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>';
这应该产生以下文本:
$parser 的类型:s9e\TextFormatter\Parser
$renderer 类型:s9e\TextFormatter\Renderers\XSLT
1http://php.net/extract
2https://github.com/s9e/TextFormatter/blob/master/src/Configurator.php#L223
【讨论】:
以上是关于使用 s9e\TextFormatter 的未定义变量 $parser的主要内容,如果未能解决你的问题,请参考以下文章
使用 CMake 的自定义 .h 和 cpp 的未定义符号 [关闭]
nil:NilClass 的未定义方法“每个”,但我使用了实例变量