函数中的静态变量是否初始化为NULL(手动)?

时间:2011-03-20 17:09:27

标签: php variables static

我知道他们是,问题的长版本是:

PHP手册中的哪些内容表明静态函数变量初始化为NULL并被视为空?

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

示例:在foo内部,第一次调用时,$ static初始化了哪个值?

我记得这是用PHP Manual写的,但我没有给该位置添加书签。在过去的三天里,我试图再次找到它,但没有运气。

我正在寻找一份有权威的文件,所以可以强调这句话。例如,PHP手册中的一个页面清楚地说明了那些初始化的值,如果没有指定,遗憾的是,手册中的Using static variables没有提供任何相关信息。 基于on the source-code of the PHP language(不是PHP脚本)的证明就足够了,我仍然不擅长阅读PHP源代码。

5 个答案:

答案 0 :(得分:3)

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

  

变量被视为null   如果:

     
      
  • 已为其分配常量NULL。

  •   
  • 它尚未设置为任何值。

  •   
  • 它已被取消()。

  •   

由于静态变量是变量,因此上述(第二点)足以回答您的问题。现在有人要证明手册说明静态变量的行为方式不同。

我认为如果他希望手册能够为每种类型的变量都有一个特殊的部分,那就会让人感到失望,这些变量以重复的方式解释每个变量在初始化,转换,数学运算等方面的工作方式是完全相同的。

答案 1 :(得分:2)

转到http://www.php.net/manual/en/language.variables.basics.php并向下滚动至 示例#1未初始化变量的默认值。你会看到它的解释

  

取消设置和未引用(不使用   上下文)变量;输出NULL

答案 2 :(得分:1)

  

我正在寻找有权威的文件

您不需要 steenking 文档。尝试测试代码。来自PHP的交互式shell:

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

因此我们知道至少从PHP 5.3开始,静态变量就像普通变量一样:它们是null,直到给出一个值

你期待什么?你为什么问这个问题?你有这种奇怪的行为吗?

答案 3 :(得分:0)

鉴于那里有一个真正的PHP实现,你可以采用任何概念验证脚本并将其输出作为“权威”证据:

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

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

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

所以,是的,看起来声明但未显式初始化的静态变量被赋予NULL值。

答案 4 :(得分:0)

静态变量初始化为null。

class MyClass {
    static $var;
}

var_dump(MyClass::$var); // returns NULL