變數用於儲存值,比如數字、文本字串或數組。
一旦設定了某個變數,我們就可以在指令碼中重複地使用它。
PHP 中的所有變數都是以 $ 符號開始的。
在 PHP 中設定變數的正確方法是:
$var_name = value;PHP 的入門者往往會忘記在變數的前面的 $ 符號。如果那樣做的話,變數將是無效的。
讓我們試著建立一個存有字串的變數,和一個存有數值的變數:
執行個體1
| 代碼如下 |
複製代碼 |
<?php $txt = "Hello World!"; $number = 16; ?> |
執行個體2
| 代碼如下 |
複製代碼 |
<?php $foo = 25; $bar = &$foo; // 合法的賦值 $bar = &(24 * 7); // 非法; 引用沒有名字的運算式 function test() { return 25; } $bar = &test(); // 非法 ?> |
預定義變數
PHP 提供了大量的預定義變數。由於許多變數依賴於啟動並執行伺服器的版本和設定,及其它因素,所以並沒有詳細的說明文檔。一些預定義變數在 PHP 以命令列形式運行時並不生效。
變數範圍
變數的範圍即它定義的上下文範圍(也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 引入的檔案。
PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函數中自動生效,除非被局部變數覆蓋。而PHP中的局部變數不會被全域變數覆蓋,如果使用會是變數的預設初始值。這可能引起一些問題,有些人可能不小心就改變了一個全域變數。PHP 中全域變數在函數中使用時必須申明為global。
使用靜態變數
變數範圍的另一個重要特性是靜態變數(static variable)。靜態變數僅在局部函數域中存在,但當程式執行離開此範圍時,其值並不丟失。
注意事項:
變數的命名規則
變數名必須以字母或底線 "_" 開頭。
變數名只能包含字母數字字元以及底線。
變數名不能包含空格。如果變數名由多個單片語成,那麼應該使用底線進行分隔(比如 $my_string),或者以大寫字母開頭(比如 $myString)。
php變數定義
1.定義常量define("CONSTANT", "Hello world.");
常量只能包含標量資料(boolean,integer,float 和 string)。
調用常量時,只需要簡單的用名稱取得常量的值,而不能加“$”符號,如:echo CONSTANT;
注: 常量和(全域)變數在不同的名字空間中。這意味著例如 TRUE 和 $TRUE 是不同的。
2.普通變數$a = "hello";
3.可變變數(使用兩個貨幣符號($))
$$a = "world";
兩個變數都被定義了:
$a 的內容是“hello”並且 $hello 的內容是“world”。
因此,可以表述為:
echo "$a ${$a}";或者 echo "$a $hello";它們都會輸出:hello world
要將可變變數用於數組,必須解決一個模稜兩可的問題。這就是當寫下 $$a[1] 時,解析器需要知道是想要 $a[1] 作為一個變數呢,還是想要 $$a 作為一個變數並取出該變數中索引為 [1] 的值。解決此問題的文法是,對第一種情況用 ${$a[1]},對第二種情況用 ${$a}[1]。
4.靜態變數
在函數內部static $a = 0;
注意:聲明中用運算式的結果對其賦值會導致解析錯誤如static $a =3+3;(error)
靜態變數僅在局部函數域中存在(函數內部),函數執行完之後,變數值不會丟失,可用於遞迴調用
5.全域變數
在函數體內定義的global變數,函數體外可以使用,在函數體外定義的global變數不能在函數體內使用,在全域範圍內訪問變數可以用特殊的 PHP 自訂 $GLOBALS 數組:
如:$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
在一個函數域內用 global 語句匯入的一個真正的全域變數實際上是建立了一個到全域變數的引用
global $obj;
註:對於變數的 static 和 global 定義是以 應用 的方式實現的
6.給變數賦值:傳地址賦值(簡單引用):
$bar = &$foo; //加&符號到將要賦值的變數前
改動新的變數將影響到原始變數,這種賦值操作更加快速
注意:只有命名變數才可以傳地址賦值
注意:如果
$bar = &$a;
$bar = &$foo;
改變$bar的值只能改變變數foo的值,而不改變a的值(引用改變了)
7.PHP 超全域變數$GLOBALS : 包含一個引用指向每個當前指令碼的全域範圍內有效變數。該數組的鍵標為全域變數的 名稱。從 PHP 3 開始存在 $GLOBALS 數組。
$_SERVER : 變數由 Web 服務器設定或者直接與當前指令碼的執行環境相關聯。類似於舊數組 $HTTP_SERVER_VARS 數組(依然有效,但反對使用)。
$_GET : 經由 HTTP GET 方法提交至指令碼的變數。
$_POST : 經由 HTTP POST 方法提交至指令碼的變數。
$_COOKIE : 經由 HTTP Cookies 方法提交至指令碼的變數。
$_FILES : 經由 HTTP POST 檔案上傳而提交至指令碼的變數。
檔案上傳表單中要有 enctype="multipart/form-data"
$_ENV : 執行環境提交至指令碼的變數。
$_REQUEST :經由 GET,POST 和 COOKIE 機制提交至指令碼的變數,因此該數組並不值得信任。所有包含在該數組中的變數的存在與否以及變數的順序均按照 php.ini 中的 variables_order 配置指示來定義。該數組沒有直接類比 PHP 4.1.0 的早期版本。參見 import_request_variables()。
注意: 自 PHP 4.3.0 起,$_FILES 中的檔案資訊不再存在於 $_REQUEST 中。
$_SESSION :當前註冊給指令碼會話的變數。