Как изменить значение статических переменных в PHP? - PullRequest
8 голосов
/ 29 февраля 2012

Это упрощенная версия того, что я хочу выполнить:

В моем скрипте я хочу переменную, которая меняет 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, и я не до конца понял концепцию статических переменных, которую я предполагаю.Что я делаю не так?

Ответы [ 4 ]

15 голосов
/ 29 февраля 2012

PHP не может хранить значения переменных между запросами.Это означает, что каждый раз, когда вызывается ваш скрипт, переменная $bool будет иметь значение true.Если вы хотите сохранить значение между запросами, вы должны использовать sessions или, если вы хотите, чтобы переменная была разделена между сеансами, какой-то механизм кэширования, такой как APC или Memcache.

Кроме того, static используется в PHP для объявления переменной, совместно используемой на уровне класса.Таким образом, он используется в классах и доступен как self::$variableName; или Foo::$variableName

Подробнее о статических свойствах можно прочитать здесь .Из документов:

Объявление свойств или методов класса как статических делает их доступными без необходимости создания экземпляра класса.Свойство, объявленное как статическое, не может быть доступно с экземпляром объекта класса (хотя статический метод может).

Также обратите внимание, что слово static было перегружено начиная с PHP 5.3, и также можетиспользоваться для обозначения Позднее статическое связывание , с использованием static::

2 голосов
/ 29 февраля 2012

Я думаю, вам нужно лучше понять смысл статической переменной. Хранилище для переменной размещается (и освобождается) в стеке вызовов, поэтому с точки зрения разработки программного обеспечения ее значение не может быть изменено во время выполнения.

Для этого есть лучшие решения, предложенные выше.

2 голосов
/ 29 февраля 2012

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

0 голосов
/ 01 июня 2018

В php легко использовать статическое ключевое слово.Здесь я использовал статическую переменную и статический метод.Просто попробуйте это.

<?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();
?>
...