|
Note: $this 是一個(gè)特殊的變量,它不能被賦值。
變量默認(rèn)總是傳值賦值。那也就是說,當(dāng)將一個(gè)表達(dá)式的值賦予一個(gè)變量時(shí),整個(gè)原始表達(dá)式的值被賦值到目標(biāo)變量。這意味著,例如,當(dāng)一個(gè)變量的值賦予另外一個(gè)變量時(shí),改變其中一個(gè)變量的值,將不會(huì)影響到另外一個(gè)變量。有關(guān)這種類型的賦值操作,請參閱表達(dá)式一章。
php 也提供了另外一種方式給變量賦值:引用賦值。這意味著新的變量簡單的引用(換言之,“成為其別名” 或者 “指向”)了原始變量。改動(dòng)新的變量將影響到原始變量,反之亦然。
使用引用賦值,簡單地將一個(gè) & 符號(hào)加到將要賦值的變量前(源變量)。
有一點(diǎn)重要事項(xiàng)必須指出,那就是只有有名字的變量才可以引用賦值。
復(fù)制代碼 代碼如下:
<?php
$foo = 25;
$bar = &$foo; // 合法的賦值
$bar = &(24 * 7); // 非法; 引用沒有名字的表達(dá)式
function test()
{
return 25;
}
$bar = &test(); // 非法
?>
雖然在 php 中并不需要初始化變量,但對(duì)變量進(jìn)行初始化是個(gè)好習(xí)慣。未初始化的變量具有其類型的默認(rèn)值 - 布爾類型的變量默認(rèn)值是 FALSE,整形和浮點(diǎn)型變量默認(rèn)值是零,字符串型變量默認(rèn)值是空字符串或者數(shù)組變量的默認(rèn)值是空數(shù)組。
依賴未初始化變量的默認(rèn)值在某些情況下會(huì)有問題,例如把一個(gè)文件包含到另一個(gè)之中時(shí)碰上相同的變量名。另外把 register_globals 打開是一個(gè)主要的安全隱患。使用未初始化的變量會(huì)發(fā)出E_NOTICE錯(cuò)誤,但是在向一個(gè)未初始化的數(shù)組附加單元時(shí)不會(huì)。isset() 語言結(jié)構(gòu)可以用來檢測一個(gè)變量是否已被初始化。
預(yù)定義變量
php 提供了大量的預(yù)定義變量。由于許多變量依賴于運(yùn)行的服務(wù)器的版本和設(shè)置,及其它因素,所以并沒有詳細(xì)的說明文檔。一些預(yù)定義變量在 php 以命令行形式運(yùn)行時(shí)并不生效。
從 php 4.1.0 開始,php 提供了一套附加的預(yù)定數(shù)組,這些數(shù)組變量包含了來自 web 服務(wù)器(如果可用),運(yùn)行環(huán)境,和用戶輸入的數(shù)據(jù)。這些數(shù)組非常特別,它們在全局范圍內(nèi)自動(dòng)生效,例如,在任何范圍內(nèi)自動(dòng)生效。因此通常被稱為自動(dòng)全局變量(autoglobals)或者超全局變量(superglobals)。(php 中沒有用戶自定義超全局變量的機(jī)制。)超全局變量羅列于下文中;但是為了得到它們的內(nèi)容和關(guān)于 php 預(yù)定義變量的進(jìn)一步的討論以及它們的本質(zhì),請參閱預(yù)定義變量。而且,你也將注意到舊的預(yù)定義數(shù)組($HTTP_*_VARS)仍舊存在。自 php 5.0.0 起, 用 register_long_arrays 設(shè)置選項(xiàng)可禁用 長類型的 php 預(yù)定義變量數(shù)組。
變量范圍
變量的范圍即它定義的上下文范圍(也就是它的生效范圍)。大部分的 php 變量只有一個(gè)單獨(dú)的范圍。這個(gè)單獨(dú)的范圍跨度同樣包含了 include 和 require 引入的文件。
php 的全局變量和 C 語言有一點(diǎn)點(diǎn)不同,在 C 語言中,全局變量在函數(shù)中自動(dòng)生效,除非被局部變量覆蓋。而php中的局部變量不會(huì)被全局變量覆蓋,如果使用會(huì)是變量的缺省初始值。這可能引起一些問題,有些人可能不小心就改變了一個(gè)全局變量。php 中全局變量在函數(shù)中使用時(shí)必須申明為global。
使用靜態(tài)變量
變量范圍的另一個(gè)重要特性是靜態(tài)變量(static variable)。靜態(tài)變量僅在局部函數(shù)域中存在,但當(dāng)程序執(zhí)行離開此作用域時(shí),其值并不丟失。
php技術(shù):PHP 第三節(jié) 變量介紹,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。