2017-07-28 52 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; 

現在你有了這個變量,你有鏈接到內存,但是在這個內存中你沒有任何數據。

相關問題