- 已锁定4天**。此时正在解决disputes about this question’s content。当前不接受新答案或交互。
我有一个如下所示的php
代码,其中出现错误Undefined offset: 0 at Line A and Undefined offset: 1 at Line B
<?php
$area = &$_SESSION['diagram']->areas[$index];
// If a new one, create it and link in the session
if (!is_object($area)) {
$area = new DiagramArea();
$_SESSION['diagram']->areas[$index] = &$area;
}
for ($i = 0; 5 > $i; ++$i) {
var_dump($area->files); // Line M
?>
<fieldset>
<legend>Name / Pattern</legend>
<input type="text" name="label<?php echo $i; ?>"
value="<?php echo is_object($area->files[$i]) ? $area->files[$i]->label : ''; ?>" /> // Line A
<input type="text" name="pattern<?php echo $i; ?>"
value="<?php echo is_object($area->files[$i]) ? $area->files[$i]->pattern : ''; ?>" /> // Line B
</fieldset>
<?php } ?>
出于调试目的,我在上面的代码中添加了Line M
。在Line M
中,我得到了以下o/p:
./abc.php:99:
array (size=0)
empty
- 问题陈述:**
我想知道我需要在Line A
和Line B
上做什么修改,这样我就可以避免这两行中的警告。
1条答案
按热度按时间ac1kyiln1#
因为您正在执行
is_object
测试,所以通过执行property_exists
测试来确保您的对象与您期望的匹配可能是值得的,然而,这可能也是过度的(尽管它不会造成伤害)。这个版本将内容分成多行,我个人认为这会使它更具可读性。它还使用了PHP的另一种控制结构,不使用大括号。这是可选的,但是,我个人再次发现,当在HTML和PHP之间切换时,它更容易阅读,所以我不需要到处追逐大括号。最后,我非常努力地避免在HTML属性中执行大量逻辑,而只是执行
echo
,原因是在调试时,HTML解析算法可能会在浏览器中隐藏PHP错误。确保在使用此函数时不会意外地错过input元素上的结束字符
/>
。