Это упрощенная версия того, что я хочу выполнить:
В моем сценарии я хочу переменную, которая меняет true и false каждый раз, когда скрипт выполняется.
<?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
и я не полностью понял концепцию статических переменных, которые я предполагаю. Что я делаю не так?
PHP не может сохранять значения переменных между запросами. Это означает, что каждый раз, когда вызывается ваш скрипт, значение $bool
-variable будет установлено в true. Если вы хотите сохранить значение между запросами, вам нужно использовать sessions
или, если вы хотите, чтобы переменная была разделена между сеансами, некоторый механизм кеширования, такой как APC
или Memcache
.
Кроме того, static
используется в PHP для объявления переменной, разделяемой на уровне класса. Таким образом, он используется в классах и доступен как self::$variableName;
или Foo::$variableName
Здесь вы можете узнать больше о статических свойствах . Из документов:
Объявление свойств класса или методов как статических делает их доступными без необходимости создания экземпляра класса. Свойство, объявленное как статическое, не может быть доступно с помощью экземпляра объекта класса (хотя может использоваться статический метод).
Также обратите внимание, что слово static
было перегружено с PHP 5.3, а также может использоваться для обозначения позднего статического привязки с использованием static::
Статическое значение не будет сохраняться при выполнении. Каждый раз, когда скрипт выполняется, $ bool инициализируется. Я думаю, вы должны сохранить эту ценность в файле, чтобы она была простой.
Я думаю, вам нужно лучше понять точку статической переменной. Хранилище для переменной выделяется (и освобождается) в стеке вызовов, поэтому с точки зрения разработки программного обеспечения его значение не может быть изменено во время выполнения.
Для этого есть лучшие решения, как было предложено выше.