php使用函数来改变函数外部变量的值

时间:2014-09-12 16:19:42

标签: php function variables

我试图在使用函数

的函数外部更改声明变量的值
<?php
$test = 1;
function addtest() {
    $test = $test + 1;
}
addtest();
echo $test;
?>

但它似乎无法实现。只有在函数中声明为参数的变量才有效。这有什么技巧吗?提前谢谢

3 个答案:

答案 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同时接受动态数量的参数,并返回动态数量的结果。