PHP 常量與變數_PHP教程

來源:互聯網
上載者:User

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 關鍵字在類定義之外定義常量。一個常量一旦被定...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.