2015-09-06 60 views
1

由於PHP手冊在php中未聲明的變量爲什麼通過錯誤?

這是沒有必要的初始化在PHP變量中所述但它是一個非常好的做法。未初始化的變量具有其類型的默認值,取決於使用它們的上下文 - 布爾值默認爲FALSE,整數和浮點數默認爲零,字符串(例如,在echo中使用)設置爲空字符串,並且數組變爲空array

如果是這樣的話,爲什麼當它試圖訪問未初始化的變量時通過錯誤(通知)?像

echo $x; 

其下面的消息回報,即使在腳本

注意:未定義的變量:X ...

,但是當我宣佈$x作爲NULL那麼它不是通過任何通知或錯誤和正常工作

$x = NULL; 
echo $x; 

現在我的問題是爲什麼它通過通知,如果不宣佈像$x = NULL$x = ''雖然未申報變量初始化爲NULL這是手冊中明確提到?

我有一個腳本和許多未初始化的變量,並遇到此問題。

+0

是否使用PHP的版本相同,你看手冊? –

+0

嘗試更改您的PHP版本 – aldrin27

+0

我正在使用php 5.6.8和在線手冊中的報價。 –

回答

0

我認爲,如果你用$ x uninitialized throws警告執行echo,因爲這些變量沒有任何內存儲備。

在另一種情況下,當您執行$ x = null時,您將爲$ x變量保留內存,儘管您沒有給它賦值。

+0

,當$ x = NULL時,它保留了多少內存? –

+0

請檢查此示例http://sandbox.onlinephpfunctions。com/code/ea22efd7e1c1c44bad9783d5ae3b155b3dea1332 –

0

聲明和初始化之間存在巨大差異。在使用它之前,你需要聲明一個變量,但是你並不需要初始化它。

2

嗯,我認爲你需要更好地理解變量的生命週期。由於PHP是運行時解釋型語言使用後期綁定;例如:

$null=null; 
$empty=""; 
$true=true; 
unset($undefined); 

這將導致:

isset($undefined): false 
empty($undefined): true 
is_null($undefined): true 

isset($null): false 
empty($null): true 
is_null($null): true 

isset($empty): true 
empty($empty): true 
is_null($empty): false 

isset($true): true 
empty($true): false 
is_null($true): false 

從這裏就可以看出,沒有從空變量未定義的人差。

解決方案:

使用isset以防止這些警告

+0

哪個會更快? 'isset($ x)'或'$ x = NULL'。任何想法?我的應用程序是實時的,所以性能無關緊要。 –

+0

當我測試兩種情況時,結果都是相同的速度,每次執行140毫秒。你必須記住,在這兩種情況下,只是測試是否有任何內存中的該點的引用。沒有其他的 –

相關問題