我想弄清楚如何使用一个在函数外部设置的变量,在函数内部。有什么办法可以做到吗?我尝试将变量设置为“global”,但似乎没有按预期进行。我的代码的一个简单例子
$var = '1'; function() { $var + 1; return $var; }
我希望它返回值2。
bxjv4tth1#
但你真的不应该使用这种方法。参见Why global variables are evil。相反,将变量作为参数传递:
function($param) { $param += 1; return $param; } $var = 1; $var = function($var); // get your value of 2
jjjwad0x2#
全球性的会做的伎俩,但一般是好远离。在较大的程序中,你不能确定它们的行为,因为它们可以在整个程序的任何地方被改变。测试使用全局变量的代码变得非常困难。另一种方法是使用类。
class Counter { private $var = 1; public function increment() { $this->var++; return $this->var; } } $counter = new Counter(); $newvalue = $counter->increment();
mfpqipee3#
$var = 1; function() { global $var; $var += 1; return $var; }
或
$var = 1; function() { $GLOBALS['var'] += 1; return $GLOBALS['var']; }
kjthegm64#
函数中的这一行:$var + 1不会更改分配给$var的值,即使您使用global关键字。但是,这两种方法都可以工作:$var = $var + 1;或$var += 1;
$var + 1
$var
$var = $var + 1;
$var += 1;
qzlgjiam5#
有关文档,请参见http://php.net/manual/en/language.variables.scope.php。我认为在您的特定情况下,您没有得到想要的结果,因为您没有将$var + 1操作分配给任何东西。基本上,数学是执行的,然后被扔掉。下面是一个工作示例:
$var = '1'; function addOne() { global $var; $var = $var + 1; return $var; }
5条答案
按热度按时间bxjv4tth1#
但你真的不应该使用这种方法。参见Why global variables are evil。相反,将变量作为参数传递:
jjjwad0x2#
全球性的会做的伎俩,但一般是好远离。在较大的程序中,你不能确定它们的行为,因为它们可以在整个程序的任何地方被改变。测试使用全局变量的代码变得非常困难。
另一种方法是使用类。
mfpqipee3#
或
kjthegm64#
函数中的这一行:
$var + 1
不会更改分配给$var
的值,即使您使用global关键字。但是,这两种方法都可以工作:
$var = $var + 1;
或$var += 1;
qzlgjiam5#
有关文档,请参见http://php.net/manual/en/language.variables.scope.php。我认为在您的特定情况下,您没有得到想要的结果,因为您没有将
$var + 1
操作分配给任何东西。基本上,数学是执行的,然后被扔掉。下面是一个工作示例: