2011-02-20 42 views
23

我想弄清楚如何我可以使用一个变量,已被设置在一个函数之外,里面。有没有办法做到这一点?我试图将变量设置为“全局”,但似乎没有按预期工作。从外部获取变量,里面的功能在PHP

我的代码

$var = '1'; 

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

我想一个简单的例子,来回报2

+1

从'我想这样,返回的2.'我建议做'$ VAR =函数($ VAR){$回报VAR + 1的值; }'。这样,你可以避免使用全局变量,这是一个糟糕的设计模式。 –

回答

43

你需要使用global关键字你的函数值。 http://php.net/manual/en/language.variables.scope.php

编辑(不好意思我忽略了这,多亏了评论者)

...,结果存储到某处

$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? 
} 
+1

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

+0

Bah,这太简单了!无论如何,非常感谢您的快速回复!队友的欢呼声! – Henrikz

+2

通常不建议使用全局,但不要超过绝对必要 – 2011-02-20 22:24:02

-1
<?php 
$var = '1'; 
function x ($var) { 
return $var + 1; 
} 
echo x($var); //2 
?> 
+1

值存储失败。 –

5
$var = 1; 

function() { 
    global $var; 

    $var += 1; 
    return $var; 
} 

OR

$var = 1; 

function() { 
    $GLOBALS['var'] += 1; 
    return $GLOBALS['var']; 
} 
3

有关文档,请参阅http://php.net/manual/en/language.variables.scope.php。我想在你的具体情况下,你没有得到你想要的结果,因为你没有将$var + 1操作分配给任何东西。数学是基本完成的,然后被扔掉。请参阅下面的工作示例:

$var = '1'; 

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

这条线的功能: $var + 1 不会改变分配给$var的价值,即使你使用global关键字。

这些要么将工作,但是: $var = $var + 1;$var += 1;

+0

既然你没有回答这个问题,我认为这将作为评论更有意义。不过,这是正确的。 – devios1

9

全局会做的伎俩,但总体上是好的要远离。在较大的程序中,您无法确定是否存在行为,因为它们可以在整个程序中的任何地方进行更改。测试使用全局变量的代码变得非常困难。

另一种方法是使用一个类。

class Counter { 
    private $var = 1; 

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

$counter = new Counter(); 
$newvalue = $counter->increment(); 
+0

+1是一种比全局状态更好的解决方案,但是也可能需要为$ var的getter来处理某些人只需要当前值而不增加它的情况 – GordonM

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