如何更改 PHP 中的静态变量值?
Posted
技术标签:
【中文标题】如何更改 PHP 中的静态变量值?【英文标题】:How do I change a static variables value in PHP? 【发布时间】:2012-03-18 19:45:29 【问题描述】:这是我想要完成的简化版本:
在我的脚本中,我想要一个每次执行脚本时都会改变真假的变量。
<?php
static $bool = true;
// Print differente messages depending on $bool
if( $bool == true )
echo "It's true!";
else
echo "It's false!";
// Change $bools value
if( $bool == true )
$bool = false
else
$bool = true;
?>
但显然我的做法是错误的。变量$bool
一直是true
,我还没有完全掌握我认为的静态变量的概念。我做错了什么?
【问题讨论】:
【参考方案1】:PHP 无法在请求之间保留变量值。这意味着每次调用脚本时,$bool
-variable 将设置为 true。如果你想在请求之间保留值,你必须使用sessions
,或者,如果你想在会话之间共享变量,一些缓存机制,如APC
或Memcache
。
另外,static
在 PHP 中用于声明在类级别共享的变量。因此,它在类中使用,并像 self::$variableName;
或 Foo::$variableName
一样访问
您可以阅读有关static properties here 的更多信息。来自文档:
将类属性或方法声明为静态使它们无需实例化即可访问。声明为静态的属性不能被实例化的类对象访问(尽管静态方法可以)。
另外,请注意,static
这个词自 PHP 5.3 起已被重载,也可用于表示 Late Static Binding,通过使用 static::
【讨论】:
嗯.. 所以如果我将静态变量移动到一个类中,我是否能够在主脚本的执行之间来回切换它的值? 没有。静态可用于声明类变量或在函数内声明一个变量,该变量在函数调用中持续存在,但在脚本执行时不存在。【参考方案2】:静态值不会在执行过程中持续存在。 每次执行脚本时都会初始化 $bool。 我认为您应该将此值保存在文件中以使其简单。
【讨论】:
我认为这是静态变量的重点,它们确实会在执行过程中持续存在。我不希望将其保存在单独的文件中,还是这是唯一的解决方案? 你可以使用 Memcache、APC、Redis、一个文件......任何你想要的。但是您必须将变量的当前值存储在某处。【参考方案3】:我认为您需要更好地理解静态变量的意义。变量的存储在调用堆栈上分配(和解除分配),因此从软件工程的角度来看,它的值不能在运行时更改。
上面建议有更好的解决方案。
【讨论】:
其实 PHP 中的静态变量根本不是静态的。它们的值可以在执行过程中改变。它只是一个类的共享变量。 这会启用像class Lookup protected static $_cache = array(); public function expensiveLookup ($x) if(!isset(self::$_cache[$x]) self::$_cache[$x] = $this->_lookup($x); return self::$_cache[$x];
这样的代码【参考方案4】:
在 php 中使用 static 关键字是一件容易的事。在这里,我使用了一个静态变量和一个静态方法。试试这个吧。
<?php
class Test
protected static $myVar;
public static function printHello()
self::$myVar = 'Hello'; //This will assign the value to the static variable $myVar
echo self::$myVar; //This prints the value of static variable $myVar
Test::printHello();
?>
【讨论】:
以上是关于如何更改 PHP 中的静态变量值?的主要内容,如果未能解决你的问题,请参考以下文章