升级php版本时注意事项
我正在使用一个类对矩阵进行一些计算,在本例中:获取每列的总和。 总和输出是正确的,如果我隐藏通知,问题就解决了,但从逻辑上讲,我更喜欢更正 在PHP 5.3中,我在这个函数中得到了一些注意:升级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 =&
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;
}