如何更改函数中的静态变量?

时间:2012-03-21 01:05:40

标签: php function static scope

我不确定是否可以这样做,但我想我会问。由于长期,管理相关和无聊的原因......能够在类中的方法内更改声明为static的变量非常有用。例如:

class Test{
    function staticFunction() {
        static $value = 'Hello, world!';
    }
}

出于这个问题,我无法更改Test::staticFunction()内的代码。因此,这不是可通过self::$value访问的类变量,而是仅在此函数范围内定义的变量。有没有办法从方法范围之外更改$value变量?

3 个答案:

答案 0 :(得分:2)

根据我在manual上看到的内容,无法完成:

  

静态变量仅存在于本地函数作用域中,但在程序执行离开此作用域时它不会丢失其值。

有趣的是,那些PHP静态变量。

答案 1 :(得分:1)

这应该指向正确的方向:

class Foo
{
    public function bar( $param )
    {
        static $enigma = 'cogito ergo sum';
        $enigma = $param;
    }
}

$method = new ReflectionMethod( 'Foo', 'bar' );
var_dump( $method->getStaticVariables() );

$test = new Foo;
$test->bar( 'bar' );

$method = new ReflectionMethod( $test, 'bar' );
var_dump( $method->getStaticVariables() );

答案 2 :(得分:0)

函数体第一次执行时定义的静态变量。 在你的例子中:

static $value = 'Hello, world!';

变量$ value,其值为'Hello,world!'将在第一次调用函数时定义...其他时候调用函数时,此行将被忽略,直到脚本不会停止执行。当函数体将被执行时,静态变量保持其数据并且不会像局部变量一样被销毁。