2012-03-26 66 views
1

在数组的构建过程中,我试图调用一个函数,checkIfNodeExists()。 PHP执行这个函数并给了我预期的结果,但他仍然给我一个“通知”,我不想在我的代码中出现任何类型的错误。数组中的调用函数(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现在

,如果我检查是否“客观的” OUTSIDE存在该阵列,PHP不给我一个通知。但是,这将导致更多的代码,因为我有一个额外的variabele工作和更多的IF结构等等...

有无需添加额外的代码太行任何其他可能性?

+0

确保$本条> objectives->材料 - > mattext正常启动和界定。请注意,更多的代码不一定更糟! – 2012-03-26 09:02:01

+0

也许你应该在调用checkIfNodeExists之前检查isset – Fivell 2012-03-26 09:11:33

回答

1

似乎$section->objectives->material->mattext不正确定义。我会开始在那里看看你是否有错误的对象的初始化。

如果您发布了更多代码,那么我们可以在此脚本中看到究竟发生了什么,这会更好。

解决方案可能需要更多的代码(尽管在这种情况下不太可能),但这绝不是坏事。较少的代码不一定更好或更高效!显然,这不用说,更少的代码会(大部分时间)执行得更快,但这并不使它更安全的或有效

UPDATE

您可以简单地这样做而不是调用另一个函数:

'objective' => isset($section->objectives->material->mattext) ? (string)$section->objectives->material->mattext : null 

我没有测试过这一点,可以不记得你是否可以内嵌在条件语句,因此不能肯定是否会工作,但如果这样做,那么这将是更有效的,而且它少代码!

+1

好的哈利路亚,有条件的作品。但我明白,更多的代码不一定是坏的。谢谢! – 2012-03-26 09:25:14

+0

很高兴我可以帮助,享受! :-) – 2012-03-26 09:25:58

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) 
); 
+2

是的,但这只是压制错误。该功能没有做他想做的事情,所以这不会对它进行排序! – 2012-03-26 09:04:58

0

定义$本条> objectives->材料 - > mattext

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' 
);