在PHP中,从函数的外部和内部获取变量

在PHP中,从函数的外部和内部获取变量,php,function,variables,global-variables,Php,Function,Variables,Global Variables,我试图弄清楚如何使用在函数外部、函数内部设置的变量。有没有办法做到这一点?我尝试将变量设置为“全局”,但结果似乎没有达到预期效果 我的代码的一个简单示例 $var = '1'; function() { $var + 1; return $var; } 我希望它返回值2。您需要在函数中使用全局关键字。 编辑(由于评论,我忽略了这一点) …并将结果存储在某个地方 $var = '1'; function() { global $var; $var += 1;

我试图弄清楚如何使用在函数外部、函数内部设置的变量。有没有办法做到这一点?我尝试将变量设置为“全局”,但结果似乎没有达到预期效果

我的代码的一个简单示例

$var = '1';

function() {
    $var + 1;
    return $var;
}

我希望它返回值2。

您需要在函数中使用全局关键字。

编辑(由于评论,我忽略了这一点)

…并将结果存储在某个地方

$var = '1';
function() {
    global $var;
    $var += 1;   //are you sure you want to both change the value of $var
    return $var; //and return the value?
}

有关文档,请参阅。我认为在您的特定情况下,您没有得到想要的结果,因为您没有将
$var+1
操作分配给任何对象。基本上,数学是先完成,然后扔掉的。请参见下面的工作示例:

$var = '1';

function addOne() {
   global $var;
   $var = $var + 1;
   return $var;
}

函数中的这一行:
$var+1
即使使用全局关键字,也不会更改分配给
$var
的值

但是,这两种方法中的任何一种都会起作用:
$var=$var+1
$var+=1

全球玩家可以做到这一点,但通常最好远离他们。在较大的程序中,您无法确定这些行为,因为它们可以在整个程序中的任何地方更改。测试使用全局变量的代码变得非常困难

另一种方法是使用类

class Counter {
    private $var = 1;

    public function increment() {
        $this->var++;
        return $this->var;
    }
}

$counter = new Counter();
$newvalue = $counter->increment();
根据:最好把

$var = '1';

function($var) {
$var + 1;
return $var;
}

如果我弄错了,请更正。

$var='1';function(){global$var;$var+1;return$var;}
Bah,太简单了!无论如何,非常感谢您的快速回复!干杯,伙计!通常不建议使用global,除非绝对必要,甚至通过
global
,语句
$var+1提供访问计算结果为
2
,但不将结果存储在任何位置。试试
$var++
$var+=1,但请注意,它也会更改原始变量。因为您没有回答这个问题,我认为这作为一个注释会更有意义。尽管如此,这是正确的。我希望从
返回2的值。
我建议执行
$var=function($var){return$var+1;}
。这样,您就可以避免使用全局变量,这是一个糟糕的设计模式。+1是一个比全局状态好得多的解决方案,但对于某些人只需要当前值而不需要增加当前值的情况,也可能需要$var的getter
$var = '1';

function addOne() {
   global $var;
   $var = $var + 1;
   return $var;
}
class Counter {
    private $var = 1;

    public function increment() {
        $this->var++;
        return $this->var;
    }
}

$counter = new Counter();
$newvalue = $counter->increment();
$var = '1';
function addOne() use($var) {
   return $var + 1;
}
$var = '1';

function($var) {
$var + 1;
return $var;
}