2012-09-04 139 views
1

這是關於PHP全局變量的。這是否意味着全局變量是通過HTTP請求簡單分配的值(即:預先存在但沒有值的Varaibles),或者變量是「實例化」的和分配的值(即:腳本中不存在的變量) ? 我還沒有看到任何解釋的文字。「註冊」變量意味着什麼

+0

你的意思是'register_globals'? –

+0

@arxanas是的,register_globals。 –

回答

0

PHP的register_globals將創建適當的全局變量併爲其賦值。請注意,使用register_globals可能是一個非常糟糕的主意,因爲它帶來了安全風險。最好使用超全球陣列$_POST$_GET$_COOKIE

+0

謝謝,我的問題也適用於超全球。那麼除了超級全球變得更安全之外,這兩個變量類型的變量是否相同(創建和賦值)呢? –

+0

只有少數超級全球性,並且只要PHP運行就都存在。您無法創建自己的超全球資源AFAIK,它們每次都由PHP爲您預先創建。 –

+0

是的,我的意思是「由系統創建和分配」,而不是由我自己。 –

1

register ing globals僅僅意味着將各種請求變量註冊爲全局可用的過程。然而,在這種情況下,「註冊」在本質上與「分配」或「設置」不同,因爲全局變量固有地鏈接到它們的超全局鍵對應物(或「註冊」爲別名),可能通過以下代碼片段進行最佳總結:

// register_globals is on 
$_POST["username"] === $username; // true 

$username = "foo"; 
$_POST["username"] === $username; // *still* true 

$_POST["username"] = "bar"; 
$_POST["username"] === $username; // *still* true 

也就是說,更改一個會更改相應的超全局鍵。當然,不應該依賴這種行爲 - 如果你首先使用register_globals,那麼你做錯了什麼。