升级php版本时的注意事项

时间:2011-11-19 19:03:35

标签: php notice

我正在使用类来对矩阵进行一些计算,在这种情况下:获取每列的总和。

总和输出是正确的,如果我隐藏通知,问题就解决了,但从逻辑上讲,我更喜欢修正。

在PHP 5.3中,我在这个函数中得到了一些注意事项:

Notice: Undefined offset: 0 
Notice: Undefined offset: 0 
Notice: Undefined offset: 1 

脚本

function sum()
    {
        foreach($this->numbers as $i => $rows)
        {
            foreach($rows as $j => $number)
            {
                $this->sum[0][$j] += $number; //notices here
            }
        }
        $the_sum = new matrix($this->sum, 1, $this->get_num_columns());

        return $the_sum;
    }

矩阵

1     | 4

0.25  | 1



var_dump($this->numbers);
array
  0 => 
    array
      0 => int 1
      1 => float 4
  1 => 
    array
      0 => float 0.25
      1 => int 1

 $this->get_num_columns() // 2

有任何想法纠正这些通知吗?

感谢

1 个答案:

答案 0 :(得分:3)

是的,发生通知是因为您要添加数字的变量中没有初始值。您应检查该号码是否存在并在向其添加号码之前对其进行初始化。 (注意,这不会改善您的结果,但最好初始化变量)。

function sum()
    {
        foreach($this->numbers as $i => $rows)
        {
            foreach($rows as $j => $number)
            {
                if (!isset($this->sum[0][$j])) $this->sum[0][$j] = 0;
                $this->sum[0][$j] += $number; //no notices here
            }
        }
        $the_sum = new matrix($this->sum, 1, $this->get_num_columns());

        return $the_sum;
    }

无关的考虑要点

  • 正确的命名标准规定类名应该大写,以区别于功能。因此,您应该将课程命名为Matrix,而不是matrix
  • 如果你有机会,一个更好的解决方案是用0预先​​填充你的数组。 array_fill()很好地完成了这项工作。