升级php版本时注意事项

升级php版本时注意事项,php,notice,Php,Notice,我正在使用一个类对矩阵进行一些计算,在本例中:获取每列的总和。 总和输出是正确的,如果我隐藏通知,问题就解决了,但从逻辑上讲,我更喜欢更正 在PHP 5.3中,我在这个函数中得到了一些注意: Notice: Undefined offset: 0 Notice: Undefined offset: 0 Notice: Undefined offset: 1 脚本 function sum() { foreach($this->numbers as $i =&

我正在使用一个类对矩阵进行一些计算,在本例中:获取每列的总和。

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

在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

有没有办法更正这些通知


谢谢

是的,之所以会出现此通知,是因为您添加数字的变量中没有初始值。在添加数字之前,应检查该数字是否存在并对其进行初始化。(注意,这不会改善结果,但初始化变量是一种很好的做法)


无关考虑点
  • 正确的命名标准规定类名应大写,以区别于函数。因此,您应该将类命名为
    Matrix
    ,而不是
    Matrix
  • 如果有机会,一个更好的解决方案是在数组中预先填充0。工作做得很好

初始化
$this->sum
$this->sum[0]
。注意事项对5.3来说并不新鲜。最有可能的是,您在升级时刚刚更改了PHP设置。您当前的设置似乎是您以前应该使用的:)或者,可能有一个较早的机会使用零初始化
sum
数组。这也是一个选项,但我在代码中没有看到这个开口(我不知道类是如何构造的),所以我让它去@Wiseguy。这一点很有道理。是的,这就是我说“也许”的原因。为了学习,如果我尝试:
$this->sum[0][$j]=array\u fill(0,count($this->numbers),0)之后:
$this->sum[0][$j]+=$number我得到不支持的操作数类型您正试图在单个数组元素上使用array_fill()。您需要传递整个阵列。尝试
$this->sum[0]
甚至
$this->sum
,它将用0填充整个数组。
 $this->get_num_columns() // 2
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;
    }