php規定變數名稱的前面必須加上美元符號($),而且不管是變數還是常量,識別符號都是區別大小寫的,這有別於php關鍵字。
php的變數名不能用數字開頭,通常以大小寫字母或下劃線開頭,不過也可以使用其它字元,比如漢字。
php中除了自定義的變數外,還有大量的預定義變數,比如$_server/$_env/$_cookie/$_get/$_post/$_files/$php_errormsg/$_request/$_session/$globals等。
定義變數時直接賦值即可,php中沒有關鍵字用於定義變數:
$var = 3;
$var = true;
在php中,讀取乙個未賦值(未定義)的變數是合法的:
$a .= 'b';
var_dump($a); // string(1) "b"
var_dump($b); // null
在本例中,變數$a在未定義的情況下便與字串'b'進行接連,結果是$a在被連線之前被解析為空字串。
未初始化的變數具有其型別的預設值 - 布林型別的變數預設值是false
,整形和浮點型變數預設值是零,字串型變數預設值是空字串,陣列變數的預設值是空陣列。
在php中,一般的變數都具有全域性作用域,在函式外部定義乙個變數時,這個變數不僅可以在所有的檔案中使用,而且可以在匯入的檔案中使用,也就是說,變數沒有檔案作用域。
var_dump($x); // null
$x = 4;
var_dump($x); // int(4)
print_ok(); // ok
function print_ok()
在函式內部的變數都屬於區域性變數,除非使用global進行宣告:
$a = '1';
$b = '2';
function varset()
function varecho()
varset();
varecho();
注意,global並不是只用於函式內部,如果乙個檔案被包含進乙個函式,那麼這個檔案中也可能會用到global。
// 被包含檔案 inc.php
<?php
namespace myns
}// 執行檔案
<?php
namespace mycode
req();
$x = 40;
$y = 50;
echo \myns\getsite(); // (40, 50)
}
也可以直接通過$globals陣列訪問全域性變數
$a = '1';
$b = '2';
function varset()
varset();
echo $a, " ", $b; // 100 200
global和$globals不僅可以用來訪問全域性變數,還可以用來向全域性作用域新增變數。同時,全域性變數不受命名空間管理,所有命名空間下的全域性變數都可以通過$globals讀寫和增刪。
function test()
echo $a; // 變數未定義
echo $b; // 變數未定義
test();
echo $a; // 輸出3
echo $b; // 輸出4
// 被匯入檔案 inc.php
<?php
namespace myns
}// 執行檔案
<?php
namespace mycode
定義變數時,變數名也可以來自另乙個變數的值,例如:
$str = "name";
$$str = 3;
這時,$name的值為3。
$a = 'b';
$$a = 'c';
$$$a = 'd';
var_dump($c); // string(1) "d"
在使用陣列時,可變變數有時候需要一點特殊的處理
$a = 'vara';
$b = 'arr';
$arr = ['a', 'b'];
echo $$b[1]; // b
echo $[1]; // b 與第乙個輸出語句等效,花括號是可選的
echo $; // arr 這裡的花括號是必須的
可見,為了清晰地定界變數名稱的邊界,有時候必須使用花括號,類似的情況還包括:屬性位於陣列中,或者屬性名包含有多個部分或者屬性名包含有非法字元時。另外,這裡的花括號是不能用圓括號來代替的。
在函式內部可以將區域性變數定義成靜態變數:
static $var = 3;
注意,靜態變數的宣告是在編譯時進行解析的,所以靜態變數只能用常量初始化(或常量表示式,如:1+2),不能使用變數或其他表示式:
define('name', 'ann');
$age = 3;
function f1()
function fun()
引用賦值相當於給變數起乙個別名,這樣多個變數將代表乙個相同的實體。
$a = 3;
$b = &$a;
$c = "a";
$d = &$$c;
注意,對於物件型別,不需要使用引用賦值語法,一般的賦值實際上就是實現為引用賦值,相反,如果不想進行引用賦值,得使用clone關鍵字。另外,new運算的結果也不能再使用&來得到乙個引用,否則運算出錯,因為new運算子是自動返回乙個引用的。
這是一套附加的預定陣列,這些陣列變數包含了來自 web 伺服器(如果可用),執行環境,和使用者輸入的資料。這些陣列非常特別,它們在全域性範圍內自動生效,因此通常被稱為自動全域性變數或者超全域性變數。
超全域性變數是php內建的一類全域性可用變數,在任何地方都可直接訪問,甚至在函式中也無須global宣告。
注意,超級全域性變數不能被用作函式或類方法中的可變變數。
$globals - 乙個陣列,包含了全部可用的全域性變數,變數名就是鍵名,在函式內部除了用global宣告全域性變數外,也可以通過本陣列來訪問
$_server - 乙個陣列,包含由伺服器提供的多種資訊,諸如頭資訊、路徑、指令碼路徑等
$_get - http的get方法相關資訊
$_post - http中post方法相關資訊
$_files - 檔案上傳相關資訊
$_cookie - cookie相關資訊
$_session - session相關資訊
$_request - 包含了cookie、get、post 相關資訊
$_env - 系統環境變數
isset(),變數不是null時結果為true
unset(),清除變數的值,使之成為null
empty(),變數的值為空時返回true,如0、0.0、""、"0"、null、false、 var $var;(在類內宣告但尚未設定值的變數)、空陣列。
php中的資料型別為弱型別(動態型別),資料在使用之前無須宣告型別,而且變數的型別也可以在程式執行過程中動態改變。
型別包括以下9種:
整數、浮點數、布林(true/false)、字串、null(null)、資源、陣列、物件、可呼叫
其中,整型值(integer),浮點數值(float),字串值(string)和布林值(boolean)是四種標量型別(標量值不能拆分為更小的單元,明顯陣列就不是標量)。陣列和物件屬於復合型別。注意,這兩種型別也可以賦值給變數或者從函式返回。
浮點數並無float和double之分,兩者都是指浮點型別。
gettype()函式可以得到引數的型別字串
$a = 2;
$b = 5.6;
$c = "abc";
$d = true;
$e = null;
$f = array(2,3,4);
echo gettype($a),"\n"; // integer
echo gettype($b),"\n"; // double
echo gettype($c),"\n"; // string
echo gettype($d),"\n"; // boolean
echo gettype($e),"\n"; // null
echo gettype($f),"\n"; // array
凡是尚未設定值的變數、值被賦值為常數 null 的變數或值被 unset() 函式清除的變數均會被視為null。
資源型別代表的是一種特殊值,用來表示 php 程式的外部資源,例如資料庫、檔案、圖形影象等,這種型別通常是在呼叫函式訪問外部資源時自動建立的(即由相關函式返回乙個資源值)。
一般來說,我們並不需要手動釋放資源,php zend engine 會自動管理除了資料庫之外的所有資源,當某乙個資源不再使用時,只需要將表示該資源的變數設為null即可。
php中提供了大量的函式用於判定變數型別,這些函式都返回乙個布林值:
is_int()/is_integer()/is_long()
is_float()/is_double()/is_real()
is_bool()
is_string()
is_null()
is_resource()
is_array()
is_object()
is_numeric()(是否為數字或數字字串)
is_scalar()(是否為標量,標量指的是整數、浮點數、布林值或字串,其他的像陣列、物件等則不是標量)
PHP中判斷某個變數的型別
php的資料型別包括 integer float string boolean array object 用gettype函式獲取資料的型別,用settype函式強制轉換資料型別 is numeric mixed var 檢驗測定變數是不是為數碼或數碼字串 is bool 檢驗測定變數是不是是布林型...
php變數型別
在 php 中有兩個基本的輸出方式 echo 和 print。都可以加括號也可以不加括號 區別 echo 可以輸出乙個或多個字串 print 只允許輸出乙個字串,返回值總為 1 資料型別 string 字串 integer 整型 float 浮點型 boolean 布林型 array 陣列 obje...
PHP 的變數型別,變數檢測
變數的檢測 if isset b else isset 用於檢測變數是否設定,返回布林值,如果變數未被賦值或者賦值為 null 則返回false,反之則返回true 獲取變數型別 a 1 echo gettype a 判斷變數是否是想要型別 is int,is float,is array.a 23...