注意:未定义偏移:0 in和未定义偏移:php中1个

qni6mghb  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(176)

我有一个如下所示的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 ALine B上做什么修改,这样我就可以避免这两行中的警告。

ac1kyiln

ac1kyiln1#

因为您正在执行is_object测试,所以通过执行property_exists测试来确保您的对象与您期望的匹配可能是值得的,然而,这可能也是过度的(尽管它不会造成伤害)。
这个版本将内容分成多行,我个人认为这会使它更具可读性。它还使用了PHP的另一种控制结构,不使用大括号。这是可选的,但是,我个人再次发现,当在HTML和PHP之间切换时,它更容易阅读,所以我不需要到处追逐大括号。最后,我非常努力地避免在HTML属性中执行大量逻辑,而只是执行echo,原因是在调试时,HTML解析算法可能会在浏览器中隐藏PHP错误。

<?php for ($i = 0; 5 > $i; ++$i) : ?>
    <fieldset>
        <legend>Name / Pattern</legend>
        <input
                type="text"
                name="label<?php echo $i; ?>"
            <?php if (isset($area->files[$i]) && is_object($area->files[$i]) && property_exists($area->files[$i], 'label')): ?>
                value="<?php echo $area->files[$i]->label; ?>"
            <?php endif; ?>
        />
        <input
                type="text"
                name="pattern<?php echo $i; ?>"
            <?php if (isset($area->files[$i]) && is_object($area->files[$i]) && property_exists($area->files[$i], 'pattern')): ?>
                value="<?php echo $area->files[$i]->pattern; ?>"
            <?php endif; ?>
        />
    </fieldset>
<?php endfor; ?>

确保在使用此函数时不会意外地错过input元素上的结束字符/>

相关问题