数组中的调用函数(PHP)

时间:2012-03-26 08:59:35

标签: php arrays

在我尝试调用函数的数组的构建过程中, 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结构等等......

如果没有添加太多额外代码,是否还有其他可能性?

4 个答案:

答案 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