Как изменить статическую переменную внутри функции? - PullRequest
1 голос
/ 21 марта 2012

Я не уверен, что это можно сделать, но я подумал, что спросить.По долгим причинам, связанным с управлением и скучным ... было бы очень полезно иметь возможность изменять переменную, объявленную как static внутри метода внутри класса.Например:

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

Ради этой проблемы я не могу изменить код внутри Test::staticFunction().Таким образом, это не переменная класса, доступная через self::$value, а переменная, определенная только в области действия этой функции.Есть ли способ изменить эту переменную $value вне области действия метода?

Ответы [ 3 ]

2 голосов
/ 21 марта 2012

Из того, что я прочитал в руководстве , это невозможно сделать:

Статическая переменная существует только в локальной области функций, но не теряет своего значения, когда выполнение программы выходит из этой области.

Забавные вещи, эти статические переменные PHP.

1 голос
/ 21 марта 2012

Это должно указать вам правильное направление:

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() );
0 голосов
/ 21 марта 2012

Статическая переменная, определенная при первом выполнении тела функции.в вашем примере:

static $value = 'Hello, world!';

значение переменной $ со значением 'Hello, world!'будет определено, когда функция будет вызвана в первый раз ... в других случаях, когда функция будет вызываться, эта строка будет игнорироваться до тех пор, пока скрипт не остановит выполнение.Статическая переменная хранит свои данные и не будет уничтожена, как локальные переменные, когда будет выполнено тело функции.

...