在 WordPress 插件中的 DOM 内部使用 JSON 时出现未定义 属性: stdClass::$key 错误
Get Undefined property: stdClass::$key error when use JSON inside of DOM in WordPress plugin
在我的 WordPress 插件的主 functions.php
文件中,我使用以下代码
<?php
$str = '{"p_0":"New first content"}';
$json = json_decode($str);
$html = '<p>First</p><p>Second</p>';
$dom = new DOMDocument;
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors(false);
foreach($dom->getElementsByTagName('p') as $index => $p) {
$p->setAttribute('id','p_'.$index);
$id = $p->getAttribute('id');
if($json->{$id}) {
$p->nodeValue = $json->{$id};
}
}
echo $dom->saveXML($dom);
?>
第一段被覆盖,但我得到了错误
Undefined property: stdClass::$p_0 in ... // the line where if($json->{$id})
如何避免错误?
您只有一个 p_0
对象,您正在尝试访问 p_1
,但您的 $str
中不存在该对象
现在如果你只是想避免错误那么你可以使用isset()
你可以这样替换if条件
if(isset($json->{$id})) {
$p->nodeValue = $json->{$id};
}
在我的 WordPress 插件的主 functions.php
文件中,我使用以下代码
<?php
$str = '{"p_0":"New first content"}';
$json = json_decode($str);
$html = '<p>First</p><p>Second</p>';
$dom = new DOMDocument;
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors(false);
foreach($dom->getElementsByTagName('p') as $index => $p) {
$p->setAttribute('id','p_'.$index);
$id = $p->getAttribute('id');
if($json->{$id}) {
$p->nodeValue = $json->{$id};
}
}
echo $dom->saveXML($dom);
?>
第一段被覆盖,但我得到了错误
Undefined property: stdClass::$p_0 in ... // the line where if($json->{$id})
如何避免错误?
您只有一个 p_0
对象,您正在尝试访问 p_1
,但您的 $str
现在如果你只是想避免错误那么你可以使用isset()
你可以这样替换if条件
if(isset($json->{$id})) {
$p->nodeValue = $json->{$id};
}