Код (Text): <html><body> <?php function selfcount() { static $count = 0; $count++; echo $count; } for($i=0; $i<5; $i++) selfcount(); ?> </body></html> Почему со словом static в результате получается 12345, а без этого слова 11111?
Обычная переменная создаётся в теле функции каждый раз. После объявления и инициаизации $count = 0; в ней будет 0. В следующей строке $count++; вы увеличиваете значение на 1. С модификатором static же переменная остаётся доступной из той же функции, но не объявляется и не инициализируется заново. Сработала функция, осталась единица. При следующем вызове берётся эта единица и прибавляется ещё единица, получается 2.
при статике переменная становится общей для всех вызовов этой функции. 5 вызовов, 5 инкрементов, в результате 1-2-3-4-5 (минусы в примере разделяют вызовы функции) при не статике - переменная локальна для каждого отдельного вызова функции. каждый вызов ее определяет в 0 и инкрементирует до 1. 5 вызовов, 5 определений 0 и инкрементов до 1, в результате 1-1-1-1-1 Добавлено спустя 58 секунд: YSandro, неужели я так медленно пишу?(((
А с обычной переменной объявленной в функции без слова static после вызова функции, функция возвратила свое значение, и значения всех переменных при следующем вызове обнуляются?
Ganzal, ))) ну если ты только через 58 секунд дописал "YSandro, неужели я так медленно пишу?(((", то да, медленно. kilogram, обычные переменные после вызова как бы исчезают. Создаются переменные с тем же именем, но указывающие на другую область в памяти, то есть, новенькие совсем.