2016年4月14日 星期四

PHP: PHP 變數

== 變數
變數是由錢號($)開始,後面接著變數名稱,變數名稱有大小寫之分。

變數名稱可以是英文字母、數字、底線等字元所組成,但不能是數字開頭。

PHP中的變數並不需要特別宣告,所有未宣告的變數都視為NULL,變數的型別是直接依指派內容來決定。

PHP提供傳址的功能, 使用&號代表該變數的位址
EX: $aa = &$bb; 其中變數 $aa 是存著變數 $bb 的位址(兩個變數指向同一個位址)

== 變數範圍
程式中我們可能會在不同的位置,用到相同的變數名稱,表示不同的東西,如果變數沒有範圍就可能會互相干擾。所以在程式中,會有不同的變數範圍,當程式離開這個範圍之後,屬於此範圍的變數就會清除。
PHP的變數分為全域變數和區域變數,不同使用(宣告)的位置來決定有效範圍, 其原則如下:
1. 在 function 中的變數為區域變數。
2. 在 include 中的變數範圍與呼叫 include 的所在範圍相同。
3. 其他為全域變數。

== 全域變數
PHP 的全域變數會儲存在 $GLOBALS 的陣列變數之中
若設定 $aa='Hello!'; 則會在 $GLOBALS 陣列中增加一個 { 'aa' => 'Hello' }的元素
所以全域變數可使用 $GLOBALS['aa'] 的名稱來代替 $aa
註:在 function 中出現的變數均為區域變數, 若要使用全域變數則需先使用 global 的關鍵字宣告, 或直接使用 $GLOBALS 來存取全域變數的內容
其實在函數中使用 global $aa; 宣告與直接使用 $GLOBALS['aa'] 還是有點差異
因為 global $aa; 的宣告相當於是 $aa = &$GLOBALS['aa']; 即宣告一個aa的區域變數, 並指向全域變數aa的位址, 而使 $GLOBALS['aa'] 則是直接使用全域變數aa

== 靜態變數
PHP 使用 static 關鍵字來宣告靜態變數
靜態變數會一直存在,直到程式結束
靜態變數特性如下:
1. 靜態變數的指派必須要直接給一個定值(不可為運算式、變數、函式結果或物件)
2. 重複的宣告靜態變數時,以最後一次宣告的值為初始值

== 可變變數(變數的變數)
PHP提供可變變數的功能, 就是在一個字串變數名稱前加上$號, 則會以原變數內容做為新變數的名稱
其使用規則如下:
1. 使用錢號($)加上變數、常數或函式回傳值等來轉換,並可以多重使用。
2. 與字串中的變數類似,可使用大括號來明確標示出來源。
3. 不能用在類別和函式中的超級全域變數和$this關鍵字。
EX1:
$RED='紅';
$BLUE='籃';
$GREEN='綠';
$COLORS=array('RED', 'BLUE', 'GREEN');
for ($x=0; $x<3; $x++) {
//$var=$COLORS[$x];
  echo $COLORS[$x] . '字是:' . $$COLORS[$x] . '<br>';
}

EX2:
$number_1='One'; $number_2='Two'; $number_3='Three';
for ($x=1; $x<=3; $x++) {
$var='number_' . $x;
  echo $var . ' 的數值是:' . $$var . '<br>';
}

== 外部來源變數
Server 端接收 Client 端透過表單、網址列傳值或Cookie等方式傳送的資料。會依據來源而儲存在各別的預定義變數內
其變數包括 $_POST、$_GET、$_COOKIE、$_REQUEST和$_FILES(儲存上傳的檔案)。
註1:檔案上傳必須使用POST方法其 POST 內容與上傳檔案大小限制是在 php.ini 設定,其設定參數分別為 post_max_size 和 upload_max_filesize。
註2:Cookie是存放在使用者的瀏覽器,除了JavaScript外,也可以由PHP的setcookie()函式去設定,然後使用$_COOKIE去取得。
註2:$_GET、$_POST和$_COOKIE等使用者送出的請求(Request),所以會將其合併到$_REQUEST陣列內,其要合併的資料項目,定義在php.ini中的request_order或variables_order參數內, 其參數內各字元代表值如下
E: $_ENV
G: $_GET
P: $_POST
C: $_COOKIE
S: $_SERVER


沒有留言:

張貼留言