在我尝试调用函数的数组的构建过程中, checkIfNodeExists()。 PHP执行此功能并给我预期的结果,但他仍然给我一个"通知",我不想在我的代码中出现任何类型的错误。
function checkIfNodeExists($input) {
if (isset($input)) {
return (string) $input;
} else {
return 'null';
}
}
$array['sections'][] = array (
'ident' => $section->attributes()->ident,
'title' => $section->attributes()->title,
'objective' => checkIfNodeExists($section->objectives->material->mattext)
);
注意:尝试在xx行的/var/www/OLAT_Connection/QTI-XML-Parser.php中获取非对象的属性
现在,如果我检查是否"目标"存在于数组外,PHP没有给我通知。但这导致了更多的代码行,因为我必须使用额外的变量和更多的IF结构等等......
如果没有添加太多额外代码,是否还有其他可能性?
答案 0 :(得分:2)
问题在于,当您致电checkIfNodeExists
时,您会向其发送一个值,并通过向其发送值来执行该值。因此,isset()
将处理表达式$section->objectives->material->mattext
和的结果而不是表达式本身。
这样可行:
$array['sections'][] = array (
'ident' => $section->attributes()->ident,
'title' => $section->attributes()->title,
'objective' => isset($section->objectives->material->mattext) ? (string)$section->objectives->material->mattext : 'null'
);
答案 1 :(得分:1)
$section->objectives->material->mattext
似乎未正确定义。我会开始在那里查看你是否在初始化对象时出错。
如果您发布更多代码会更好,这样我们就可以看到这个脚本到底发生了什么。
解决方案可能需要更多代码(尽管在这种情况下不太可能),这绝不是一件坏事。更少的代码不一定更好或更有效!显然,不言而喻,较少的代码行(大部分时间)执行得更快,但这并不能使其更安全或更有效
<强>更新强>
您可以简单地执行此操作,而不是调用另一个函数:
'objective' => isset($section->objectives->material->mattext) ? (string)$section->objectives->material->mattext : null
我没有对此进行过测试,也不记得你是否可以将条件语句置于内联中,因此不能确定它是否可行,但如果确实如此,那么这将更有效,而且代码更少!
答案 2 :(得分:0)
如果在调用函数时添加“@”,则错误不显示
function checkIfNodeExists($input) {
if (isset($input)) {
return (string) $input;
} else {
return 'null';
}
}
$array['sections'][] = array (
'ident' => $section->attributes()->ident,
'title' => $section->attributes()->title,
'objective' => @checkIfNodeExists($section->objectives->material->mattext)
);
答案 3 :(得分:0)
定义$ section-&gt; targets-&gt; material-&gt; mattext