1、PHP變量的命名規(guī)則
① 變量名必須以
$
開頭,后面跟變量名
② 變量名須以字母或下劃線開頭
③ 變量名不能以數(shù)字開頭,但可以包含字母、數(shù)字和下劃線
④ 變量名不能包含空格
⑤ 變量名區(qū)分大小寫
2、局部變量和全局變量
變量根據(jù)作用域劃分,可分為局部變量和全局變量兩種。
① 局部變量:在函數(shù)內(nèi)定義的變量,函數(shù)內(nèi)的變量只能在函數(shù)內(nèi)使用。
② 全局變量:主要指作用于函數(shù)外得到變量,也叫外部變量,全局變量可以在函數(shù)體外的整個(gè)程序中使用,其作用域是整個(gè)源程序。如果想讓全局變量在函數(shù)體內(nèi)可以使用,那么可以通過(guò)在函數(shù)體內(nèi)使用global
聲明變量為全局變量。
3、引用變量
使用地址符
&
可以定義引用變量
<?php
$a = 10;
$b = &$a;
//$a 和 $b指向同一個(gè)內(nèi)存地址,對(duì)$b的修改也會(huì)作用于$a
函數(shù)參數(shù)的引用傳遞與值傳遞:
將&
放到函數(shù)定義的地方修飾形參,即函數(shù)參數(shù)的引用傳遞(pass by reference);引用傳遞傳送的是變量的地址,而不是它的值;使用引用傳遞參數(shù),函數(shù)內(nèi)任何改變都直接作用于函數(shù)外的原變量。
<?php
$num = 10;
//函數(shù)參數(shù)的引用傳遞
function demo(&$num){
//執(zhí)行代碼部分
}
demo($num);
①
unset()
一個(gè)引用,只是斷開了變量名和變量?jī)?nèi)容之間的綁定,未銷毀變量?jī)?nèi)容
② 檢測(cè)一個(gè)變量是否被定義,使用isset()
函數(shù)
③ 函數(shù)return返回參數(shù)形式為值傳遞
4、靜態(tài)變量
PHP靜態(tài)變量使用
static
關(guān)鍵字定義,分為局部靜態(tài)變量和全局靜態(tài)變量,還有在類中使用的靜態(tài)變量叫類的靜態(tài)成員。
靜態(tài)局部變量與局部變量:
局部變量會(huì)在函數(shù)執(zhí)行完畢后釋放,而靜態(tài)局部變量在函數(shù)執(zhí)行完畢后依然存在,下次再調(diào)用該函數(shù)時(shí),靜態(tài)局部變量的值為上次函數(shù)執(zhí)行后的值。
全局變量和靜態(tài)全局變量:
全局變量和靜態(tài)全局變量都是靜態(tài)存儲(chǔ)方式,作用域都是整個(gè)源程序。但區(qū)別在于當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),全局變量在各個(gè)源程序里都是有效的,而靜態(tài)全局變量的作用域受到限制,只能在包含該變量的源文件內(nèi)可以使用。
5、超全局變量
超全局變量,又稱超全局?jǐn)?shù)組,超全局變量是在全部作用域中始終可用的內(nèi)置變量
$GLOBALS 一個(gè)包含了全部變量的全局組合數(shù)組。變量的名字就是數(shù)組的鍵。
$_SERVER 服務(wù)器和執(zhí)行環(huán)境信息
$_GET 通過(guò) URL 參數(shù)傳遞給當(dāng)前腳本的變量的數(shù)組
$_POST 當(dāng) HTTP POST 請(qǐng)求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 時(shí),會(huì)將變量以關(guān)聯(lián)數(shù)組形式傳入當(dāng)前腳本。
$_FILES 通過(guò) HTTP POST 方式上傳到當(dāng)前腳本的項(xiàng)目的數(shù)組
$_COOKIE 通過(guò) HTTP Cookies 方式傳遞給當(dāng)前腳本的變量的數(shù)組
$_SESSION 當(dāng)前腳本可用 SESSION 變量的數(shù)組
$_REQUEST 默認(rèn)情況下包含了$_GET
、$_GET
、$_COOKIE
$_ENV 通過(guò)環(huán)境方式傳遞給當(dāng)前腳本的變量的數(shù)組
6、可變變量
可變變量是一個(gè)變量的變量名可以動(dòng)態(tài)地設(shè)置和使用的變量。例如,
$$a
、${$a}
<?php
$a = 10;
$b = 'a';
//輸出結(jié)果10,$b被解析為字符'a',所以$$b解析為$a
echo $$b;
/*------------------分割線-----------------*/
function foo(){
//函數(shù)體
}
$func = 'foo';
//可變函數(shù)調(diào)用
$func();