2012-10-12 41 views
0

採取下面的代碼看看:分配NULL和未設置有什麼區別?

<?php 
    $a = 20; 
    $a= NULL; //or unset($a) 
    if(isset($a)) 
    { 
     print("hi"); 
    } 
    else 
    { 
     echo "not initiated"; 
    } 
    if(isset($b)) //$b is a variable which is not initialized 
    { 
     print("hi"); 
    } 
    else 
    { 
     echo "not initiated"; 
    } 

?> 

和申請時未設置,我得到了相同的結果:

那麼,是什麼賦予NULL和取消區別?

+0

[此評論](http://www.php.net/manual/en/function.unset.php#105980)從'未設置()'文檔進行一些比較。 – Lix

+0

可能重複[有什麼更好的解放內存與PHP:unset()或$ var = null](http://stackoverflow.com/questions/584960/whats-better-at-freeing-memory-with-php-unset -or-var-null) –

回答

5

正如你可以看到下面,既會表現得非常標準比較操作相同。

使用unset()釋放不再使用的大型對象/數組,但由於其他位置仍然存在引用而無法由GC釋放。

------------------------------------------------------------------------------- 
| Expression  | gettype() | empty() | is_null() | isset() | boolean | 
------------------------------------------------------------------------------- 
| $x = "";   | string  | TRUE  | FALSE  | TRUE  | FALSE | 
| $x = null  | NULL  | TRUE  | TRUE  | FALSE | FALSE | 
| var $x;   | NULL  | TRUE  | TRUE  | FALSE | FALSE | 
| $x is undefined | NULL  | TRUE  | TRUE  | FALSE | FALSE | 
------------------------------------------------------------------------------- 
+0

+1的漂亮比較 – Peon

2

FORM PHP DOC isset

確定一個變量被設置,而不是NULL。

如果一個變量未被設置爲unset(),它將不再被設置。如果測試已設置爲NULL的變量,isset()將返回FALSE。另請注意,NULL字節(「\ 0」)不等價於PHP NULL常量。

在未設置

未設置(),刪除指定的變量。

如果啓動或沒有,因爲你正在使用isset將兩個發起變量和空值

2

有人從unset()

未設置(州返回false沒關係)做只是它的名字說 - 取消設置變量。它不會 強制立即釋放內存。 PHP的垃圾收集器會在 之後儘快看到適合的意圖,因爲無論如何這些CPU週期不需要 ,或者在腳本將耗盡內存之前, 無論先發生什麼。

如果你正在做$ whatever = null;那麼你是 重寫變量的數據。您可能會更快地釋放/收縮內存,但它可能會更快地從真正需要它們的代碼中竊取CPU週期,從而導致更長的總體執行時間。

2

您正在使用isset()。根據the manualisset()檢查是否設置了變量而不是NULL。因此,您不能使用isset()來區分未設置的變量和NULL變量。

將變量設置爲NULL意味着:該變量設置爲一個值,該值爲特殊值NULL。另一方面unset()表示變量不再設置。它沒有價值,基本上不存在了。

這對垃圾收集和其他事情有影響,如果你想深入探究。

1

一切都已經幾乎已經回答了,但我只是想添加這個例子:

$a = 1; 
$b = 2; 

if ($a == true) echo 'Value'; else echo 'No value'; 
if ($b == true) echo 'Value'; else echo 'No value'; 

/* 
Value 
Value 
*/ 

$a = NULL; 
unset($b); 

if ($a == true) echo 'Value'; else echo 'No value'; 
if ($b == true) echo 'Value'; else echo 'No value'; 

/* 
No value 

Notice: Undefined variable: b in C:\test\test.php on line 13 
No value 
*/ 

結果可能是接近,但最後一個產生的通知,因爲沒有這樣的變量了。

0

的主要區別在於,設置變量爲NULL等:

$a = NULL; 

被分配值,這裏的NULL值。

儘管unset()

unset($a); 

是未設置變量,這意味着從變量表中刪除它。

由於未定義的變量都NULL在PHP你可能看不出來區別。

但是,如果你的變量未設置爲一個別名,僅刪除別名,也沒有價值NULL給它的任務。

這方面的一個示範:

<?php       // 01 
           // 02 
$a = 1;      // 03 
$b = &$a;      // 04 
           // 05 
$b = NULL;     // 06 
           // 07 
var_dump($a);     // 08 
           // 09 
unset($b);     // 10 
           // 11 
var_dump($a);     // 12 
           // 13  
unset($a);     // 14 
           // 15 
var_dump($a);     // 16 

輸出:

NULL 
NULL 

Notice: Undefined variable: a in /t.php on line 16 
NULL 

http://codepad.org/cC1vRx0W

0

設置一個變量爲NULL裝置NULL值分配給完全按照該變量被設置爲可變一個值和值是特殊值NULL。

雖然未設置()銷燬指定的變量。 函數內部unset()的行爲可能因您嘗試銷燬的變量類型而異。

未設置()指該變量不再設置,它不具有的值,並基本上與變量不存在了。

相關問題