2011-06-04 81 views
3

我有大約unset問題關於PHP未設置功能

  1. 問題如何來取消所有variables.should我使用unset($var1,$var2,$var3,...)或任何其他簡單的方法存在?
  2. 在函數的最後取消變量是很好的做法嗎?.any的區別!
  3. 取消變量是否會reduce編程execution time還是不行?

感謝

+0

它非常罕見,你需要使用unset或者通過使用它來獲得任何東西。也許你應該發佈你認爲會從中受益的代碼。 – 2011-06-04 04:50:29

回答

3
  1. 你的意思是unset($var1,$var2,$var3,...)是不是你很容易?

  2. 由於局部變量總是在函數範圍的末尾消失,所以沒有必要明確這麼做。這也適用於引用變量,只有函數的局部引用纔會消失,但無論它們引用了什麼,如果在函數範圍之外,它們仍然會在那裏。

  3. 不知道。

+0

如果我想取消設置50個變量。 – Gowri 2011-06-04 04:43:58

+1

@gowri:爲什麼你首先需要50個變量來取消設置? – BoltClock 2011-06-04 04:44:28

+0

我不得不在同一頁中的代碼段使用相同的變量名稱,我只是想確保不會過度糾正。我聽說,一個錯誤,所以只有這個問題安排。 – Gowri 2011-06-04 04:58:04

0

首先,unset是一種語言結構,而不是函數。

如何取消設置所有變量。是否應該使用unset($ var1,$ var2,$ var3,...)或其他簡單的方法?

可以取消設置所有的全局變量,不過,我不明白你爲什麼會做這樣的事情:

foreach (array_keys($GLOBALS) as $var) { 
    if ($var != 'GLOBALS') unset($GLOBALS[$var]); 
} 

在函數的結束unseting變量是好的做法呢?有什麼區別!

不,變量超出範圍時會自動取消設置。手動操作毫無意義。

撤銷變量是否會減少編程執行時間?

不是,它可能雖然減少內存使用量。

1

如何取消設置所有的變量。我應該使用unset($ var1,$ var2,$ var3,...)或其他簡單的方法嗎?

是的,這是取消設置多個變量的正常方法。您可以遍歷範圍內的變量並取消設置,但這會過度。

在函數的末尾釋放變量是很好的做法嗎?.any區別!

雖然變量將在作用域(函數,類,腳本)末尾進行垃圾回收,但在單文件腳本(過程)中執行此操作可能很有用 - 特別是在其他腳本任意包含在範圍內。

這就是說,乾淨的組織,這是不必要的;然而,也不一定是壞事。

撤銷變量是否會減少編程執行時間?

在大多數情況下,幾乎沒有差別;然而,正如我前面提到的那樣,它不會受到傷害,並且可能有助於澄清什麼是/不在範圍內。實際上,我通常在for/foreach之後執行此操作,因爲/ foreach沒有塊範圍,所以在這些塊內定義的變量在循環後可用。

例子:

foreach ($doctors as $key => $val) { 
    // do something 
} 
unset($key, $val); 

順便說一句,如果你想知道如何真正批量做到這一點(是的,這是可能的,但它不是漂亮):

<?php 

$_SCRIPT_one = 1; 
$_SCRIPT_two = 2; 
$_SCRIPT_three = 3; 

// list of all variables defined 
$all = array_keys(get_defined_vars()); 

// list only the local variables we are interested in 
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); }); 

// dump currently scoped local variables 
var_dump($local); 


// unset local variables 
foreach ($local as $var) { unset($$var); } 


// list of all variables defined 
$all = array_keys(get_defined_vars()); 

// list only the local variables we are interested in 
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); }); 

// dump currently scoped local variables 
var_dump($local);