php中的型別和變數

2021-08-11 18:49:47 字數 4995 閱讀 3297

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...