如何更改 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,或者,如果你想在会话之间共享变量,一些缓存机制,如APCMemcache

另外,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-&gt;_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 中的静态变量值?的主要内容,如果未能解决你的问题,请参考以下文章

双引号中的 PHP 静态变量

通过java中不同类中的静态方法设置和获取静态变量值

MFC 随变量变化在不同静态编辑框输出变量值

公共静态变量值

lua如何实现 静态变量,多次调用同一个函数时,只初始化一次指定的变量值 没什么分,谢谢帮忙

PHP核心编程知识点