PHP 常量與變數
【常量】
可以用 define() 函數來定義常量,在 PHP 5.3.0 以後,可以使用 const 關鍵字在類定義之外定義常量。一個常量一旦被定義,就不能再改變或者取消定義。
常量只能包含標量資料(boolean,integer,float 和 string)。可以定義 resource 常量,但應盡量避免,因為會造成不可預料的結果。
可以簡單的通過指定其名字來取得常量的值,與變數不同,不應該在常量前面加上 $ 符號。如果常量名是動態,也可以用函數 constant() 來擷取常量的值。用 get_defined_constants() 可以獲得所有已定義的常量列表。
如果只想檢查是否定義了某常量,用 defined() 函數。
常量和變數有如下不同:
? 常量前面沒有貨幣符號($);
? 常量只能用 define() 函數定義,而不能通過指派陳述式;
? 常量可以不用理會變數的範圍而在任何地方定義和訪問;
? 常量一旦定義就不能被重新定義或者取消定義;
? 常量的值只能是標量。
預定義常量
很多常量都是由不同的擴充庫定義的,只有在載入了這些擴充庫時才會出現,或者動態載入後,或者在編譯時間已經包括進去了。這些特殊的常量不區分大小寫,如下:
| 名稱 |
說明 |
__LINE__ |
檔案中的當前行號。 |
__FILE__ |
檔案的完整路徑和檔案名稱。如果用在被包含檔案中,則返回被包含的檔案名稱。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑(如果是符號串連,則是解析後的絕對路徑),而在此之前的版本有時會包含一個相對路徑。 |
__DIR__ |
檔案所在的目錄。如果用在被包括檔案中,則返回被包括的檔案所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜杠。(PHP 5.3.0中新增) = |
__FUNCTION__ |
函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。 |
__CLASS__ |
類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。類名包括其被聲明的作用地區(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 對 trait 也起作用。當用在 trait 方法中時,__CLASS__ 是調用 trait 方法的類的名字。 |
__TRAIT__ |
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定義時的名字(區分大小寫)。Trait 名包括其被聲明的作用地區(例如 Foo\Bar)。 |
__METHOD__ |
類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。 |
__NAMESPACE__ |
當前命名空間的名稱(區分大小寫)。此常量是在編譯時間定義的(PHP 5.3.0 新增)。 |
【變數】
PHP 中的變數用一個貨幣符號後面跟變數名來表示。變數名是區分大小寫。 變數名與 PHP 中其它的標籤一樣遵循相同的規則。一個有效變數名由字母或者底線開頭,後面跟上任意數量的字母,數字,或者底線。
變數預設總是傳值賦值。那也就是說,當將一個運算式的值賦予一個變數時,整個原始運算式的值被賦值到目標變數。這意味著,例如,當一個變數的值賦予另外一個變數時,改變其中一個變數的值,將不會影響到另外一個變數。PHP 也提供了另外一種方式給變數賦值:引用賦值。這意味著新的變數簡單的引用(換言之,"成為其別名" 或者 "指向")了原始變數。改動新的變數將影響到原始變數,反之亦然。使用引用賦值,簡單地將一個
& 符號加到將要賦值的變數前(源變數)。
預定義變數
PHP 4.2.0 以及後續版本中,PHP 指令 register_globals 的預設值為 off。這是 PHP 的一個主要變化。讓 register_globals 的值為 off 將影響到預定義變數集在全域範圍內的有效性。例如,為了得到 DOCUMENT_ROOT 的值,將必須使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 來代替 $id 從 URL http://www.example.com/test.php?id=3 中擷取 id 值,亦或使用 $_ENV['HOME'] 來代替 $HOME 擷取環境變數 HOME 的值。
?超全域變數 — 超全域變數是在全部範圍中始終可用的內建變數
?$GLOBALS — 引用全域範圍中可用的全部變數
?$_SERVER — 伺服器和執行環境資訊
?$_GET — HTTP GET 變數
?$_POST — HTTP POST 變數
?$_FILES — HTTP 檔案上傳變數
?$_REQUEST — HTTP Request 變數
?$_SESSION — Session 變數
?$_ENV — 環境變數
?$_COOKIE — HTTP Cookies
?$php_errormsg — 前一個錯誤資訊
?$HTTP_RAW_POST_DATA — 原生POST資料
?$http_response_header — HTTP 回應標頭
?$argc — 傳遞給指令碼的參數數目
?$argv — 傳遞給指令碼的參數數組
global 關鍵字
PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函數中自動生效,除非被局部變數覆蓋。這可能引起一些問題,有些人可能不小心就改變了一個全域變數。PHP 中全域變數在函數中使用時必須聲明為 global或者用特殊的 PHP 自訂 $GLOBALS 數組。$GLOBALS 是一個關聯陣列,每一個變數為一個元素,鍵名對應變數名,值對應變數的內容。$GLOBALS 之所以在全域範圍記憶體在,是因為 $GLOBALS 是一個超全域變數。
靜態變數
變數範圍的另一個重要特性是靜態變數(static variable)。
可變變數
有時候使用可變變數名是很方便的。就是說,一個變數的變數名可以動態設定和使用。一個普通的變數通過聲明來設定。
要將可變變數用於數組,必須解決一個模稜兩可的問題。這就是當寫下 $$a[1] 時,解析器需要知道是想要 $a[1] 作為一個變數呢,還是想要 $$a 作為一個變數並取出該變數中索引為 [1] 的值。解決此問題的文法是,對第一種情況用 ${$a[1]},對第二種情況用 ${$a}[1]。
";echo invalide_value."";if(defined("INVALIDE_VALUE")){echo "INVALIDE_VALUE 已經定義".__LINE__."";;}// 變數$str1 = 'str1';$str2 = & $str1; // 引用 $str1 = "Changed $str1";echo $str1."";echo $str2."";echo $_SERVER['DOCUMENT_ROOT'].""; // 預定義變數$gVal = 13;function Test() // 全域變數{global $gVal;echo $gVal."";echo $GLOBALS['gVal']."";}Test();function test1(){ static $a = 0; // 靜態變數 echo $a; $a++;}// 可變變數class foo { var $bar = 'I am bar.'; var $arr = array('I am A.', 'I am B.', 'I am C.'); var $r = 'I am r.';}$foo = new foo();$bar = 'bar';$baz = array('foo', 'bar', 'baz', 'quux');echo $foo->$bar ."";echo $foo->$baz[1] ."";$start = 'b';$end = 'ar';echo $foo->{$start . $end} ."";$arr = 'arr';echo $foo->$arr[1] ."";echo $foo->{$arr}[1] ."";?>
http://www.bkjia.com/PHPjc/1022400.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1022400.htmlTechArticlePHP 常量與變數 【常量】 可以用 define() 函數來定義常量,在 PHP 5.3.0 以後,可以使用 const 關鍵字在類定義之外定義常量。一個常量一旦被定...