2017-07-28 90 views
-1

我有一个下面的代码片段,请有超过仔细检查了一番:PHP中未分配的静态变量包含什么以及为什么它在浏览器输出窗口中打印空白区域?

<!DOCTYPE html> 
<html> 
    <body> 

    <?php 
    function myTest() { 
     static $x; 
     echo $x; 
     $x++; 
    } 

    myTest(); 
    echo "<br>"; 
    myTest(); 
    echo "<br>"; 
    myTest(); 
    ?> 

    </body> 
</html> 

注:包含上述代码的文件的名称是demo.php和它的位置在我的笔记本是C:\ XAMPP \ htdocs中\ php_playground \ demo.php

我收到当我运行上面的程序到我的浏览器通过点击URL http://localhost/php_playground/demo.php的输出如下:

1 
2 

同样的截图也附上了,请看看它。 Output in a Browser Window

  1. 我的问题是,为什么在输出的第一行是空白只含有 空白?
  2. 为什么它不打印0或类似“NULL”或“Empty”这样的词?
  3. 实际上PHP中包含一个未分配的静态变量是什么?
  4. 静态未分配变量的默认值和未分配正常变量的默认值是否不同?

请给我适当的答案和适当的解释。

+2

'static $ x;'将变量设置为'null',直到您明确将其设置为其他值。由于您将它作为整数使用,因此将其设置为默认值:'static $ x = 0;'“空格”不是该值,它是您的'
'。 –

+0

@MagnusEriksson:如果是这样,那么为什么它没有在浏览器输出窗口中输出单词“null”? – user2839497

+1

因为'null'不是一个字符串。定义的变量为空,但没有值(因为它不打印任何东西)。 [阅读文档中关于NULL的更多信息](http://php.net/manual/en/language.types.null。php) –

回答

1

PHP中的未分配的变量转换为NULL

<?php echo NULL; ?>不回应任何内容,因为NULL没有任何价值。

NULL page of the PHP documentation(重点煤矿):

特殊的NULL值表示不带任何值的变量。 NULL是null类型唯一可能的值。

甲变量被视为如果为空:

  • 它已经分配了恒定NULL。

  • 它尚未设置为任何值。

  • 它已被取消设置()。

尝试在你的代码片段,其中var_dump($x)更换echo $x;,它会输出如下:

NULL 
int(1) 
int(2) 

Try it

0

因为NULL不是什么,它只是一个变量。你可以得到2个输出,因为你第一次调用它时,它将被初始化为1,然后递增。

<?php 
    function myTest() { 
     static $x; 
     echo $x; 
     $x++; 
    } 

    myTest(); // INIT 
    echo "<br>"; 
    myTest(); // 1 
    echo "<br>"; 
    myTest(); // +1 
    ?> 

如果将宣布$ X为0,那么将打印0

静态变量(classes),(functions

+0

是的,它是'null' ... – DrKey

+0

@DrKey - 我非常怀疑... –

+0

自己试着用'var_dump()'然后.. – DrKey

0

因为在第一步变量在 “静态” 的转让,但不包括任何价值;

它是相同的是

$t = null; 
echo $t; 

为什么它不打印0或类似的单词“NULL”或“空”这样的事情?

因为空是“没什么可看的”,变量定义,但没有任何价值

什么实际上是一个未分配的静态变量在PHP中包含哪些内容? 后你编写代码

static $x; 

你得到全局内存范围内的数据保存到它。我们知道这个变量与内存中的当前空间相关联。

你写后

unset($x) 

清除内存中(数据),这个空间,并删除链接到这个空间(变量)。

静态未赋值变量的默认值和未赋值常态变量的默认值是否不同?

是的,它是不同的。因为如果你不指定变量

echo $test; 

你得到错误 - 注意:未定义的变量:

因为你真的没有这个变量之后

static $test; 
echo $test; 

现在你有了这个变量,你有链接到内存,但是在这个内存中你没有任何数据。

相关问题