我正在尝试获取传递给函数的所有数字的总和,但是我遇到了一些问题。
我希望在回显数组和时显示结果17,数组('1','4','9','3');
result_time(1);
result_time(4);
result_time(9);
result_time(3);
$items = array();
function result_time($Num){
$items[] = $Num;
}
echo array_sum($items);
有谁可以解释我在这里做错了什么?
答案 0 :(得分:2)
这不是最佳方法,但您可以尝试将global $items;
添加到result_time
功能。
function result_time($Num)
{
global $items;
$items[] = $Num;
}
您可以在此处阅读有关变量范围的更多信息:http://php.net/manual/en/language.variables.scope.php
答案 1 :(得分:0)
$items
和函数外部的$items
在两个不同的范围内,它们是完全不同的变量。函数内的$items
在每次调用时都会重置为空,并且不会影响函数外部的$items
。从本质上讲,你的功能什么都不做。确实你应该使用一个类来做这个:
class Result {
protected $items = array();
public function add($num) {
$this->items[] = $num;
}
public function getResult() {
return array_sum($this->items);
}
}
$r = new Result;
$r->add(1);
...
echo $r->getResult();
您还可以使用static
变量使函数内的值累加:
function result_time($Num){
static $items = array();
$items[] = $Num;
return $items;
}
result_time(1);
...
$result = result_time(3);
echo array_sum($result);
但这并不是一个好主意。您也可以使用global
关键字分享变量的范围,但这不是一个好主意,我不打算做广告。了解变量范围并正确构建代码。
答案 2 :(得分:0)
看起来你已经知道了随着代码的进展你想要总结的所有值。为什么不直接将它们添加到数组中?
<?php
$result_times = array();
array_push($result_times, 1);
// some code
array_push($result_times, 4);
// other code
array_push($result_times, 9);
echo array_sum($result_times);