Статические переменные в функциях инициализируются как NULL (вручную)? - PullRequest
2 голосов
/ 20 марта 2011

Я знаю, что длинная версия вопроса:

Где в руководстве по PHP указано, что статические переменные функции инициализируются значением NULL и считаются пустыми?

<?php
function foo() {
    static $static;
}

Пример: внутри foo, к какому значению $ static инициализируется при первом вызове?

Я помню, что это было написано в Руководстве по PHP , но я не отмечал местоположение. Последние три дня я пытался найти его снова, но безуспешно.

Я ищу документ с полномочиями, поэтому можно подчеркнуть это утверждение. Например, страница в руководстве по PHP, в которой ясно, какие значения инициализированы, если ничего не указано, к сожалению, Использование статических переменных в руководстве, не дает никакой информации об этом. Доказательства, основанные на на исходном коде языка PHP (не на PHP-скрипте), также будут достаточными, я все еще не очень хорошо читаю исходный код PHP.

Ответы [ 5 ]

3 голосов
/ 22 марта 2011

http://us.php.net/manual/en/language.types.null.php:

Переменная считается нулевой если:

  • ей присвоена постоянная NULL.

  • для него еще не установлено никакого значения.

  • было отключено ().

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

Думаю, кто-то будет разочарован, если ожидает, что в руководстве есть специальный раздел для каждого типа переменной, в двух экземплярах объясняющий, как каждая из них работает одинаково в отношении инициализации, приведения, математических операций и т. Д.

2 голосов
/ 20 марта 2011

Перейдите к http://www.php.net/manual/en/language.variables.basics.php и прокрутите вниз до Пример # 1 Значения по умолчанию для неинициализированных переменных . Вы увидите, что это объясняет

Unset И без ссылок (без использования контекст) переменная; выходы NULL

1 голос
/ 20 марта 2011

Я ищу документ с правами доступа

Вам не нужен документ steenking . Попробуйте проверить код . Из интерактивной оболочки PHP:

php > function foo() { static $bar; var_export($bar); }
php > foo();
NULL

Таким образом, мы знаем, что, по крайней мере, начиная с PHP 5.3, статические переменные работают так же, как нормальные переменные: они равны null до тех пор, пока не получат значение .

Что вы ожидали? Почему ты задаешь этот вопрос? У тебя странное поведение?

0 голосов
/ 20 марта 2011

Статические переменные инициализируются нулем.

class MyClass {
    static $var;
}

var_dump(MyClass::$var); // returns NULL
0 голосов
/ 20 марта 2011

Учитывая, что на самом деле есть одна реализация PHP, вы можете взять любой сценарий проверки концепции и использовать его вывод в качестве «окончательного» доказательства:

marc@panic:~$ cat z.php
<?php

function foo() {
        static $bar;
        var_dump($bar);
}

foo();
marc@panic:~$ php z.php
NULL

так что даможет показаться, что объявленным, но не явно инициализированным статическим переменным присваивается значение NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...