我试图在使用函数
的函数外部更改声明变量的值<?php
$test = 1;
function addtest() {
$test = $test + 1;
}
addtest();
echo $test;
?>
但它似乎无法实现。只有在函数中声明为参数的变量才有效。这有什么技巧吗?提前谢谢
答案 0 :(得分:5)
将函数内的变量更改为全局 -
function addtest() {
global $test;
$test = $test + 1;
}
使用全局变量有很多注意事项 -
从长远来看,您的代码将难以维护,因为全局变量可能会对将来的计算产生不良影响,您可能不知道变量是如何被操纵的。
如果您重构代码并且函数消失,那将是有害的,因为$ test的每个实例都与代码紧密耦合。
这是一个小小的改进,并不需要global
-
$test = 1;
function addtest($variable) {
$newValue = $variable + 1;
return $newValue;
}
echo $test; // 1
$foo = addtest($test);
echo $foo; // 2
现在你还没有必须使用全局,并且在将新值分配给另一个变量时,你已经根据自己的喜好操纵了$ test。
答案 1 :(得分:0)
使用global
关键字。
<?php
$test = 1;
function addtest() {
global $test;
$test = $test + 1;
}
addtest();
echo $test; // 2
?>
答案 2 :(得分:0)
不确定这是否是一个人为的例子,但在这种情况下(如在大多数情况下),使用global
将是非常糟糕的形式。为什么不直接返回结果并分配返回值?
$test = 1;
function increment($val) {
return $val + 1;
}
$test = increment($test);
echo $test;
这样,如果您需要增加除$test
之外的任何其他变量,那么您已经完成了。
如果您需要更改多个值并返回它们,您可以返回一个数组并使用PHP的list
轻松提取内容:
function incrementMany($val1, $val2) {
return array( $val1 + 1, $val2 + 1);
}
$test1 = 1;
$test2 = 2;
list($test1, $test2) = incrementMany($test1, $test2);
echo $test1 . ', ' . $test2;
您可以使用func_get_args
同时接受动态数量的参数,并返回动态数量的结果。