【php基础入门】细说php的变量以及常量的知识点详解
變量和常量詳解
- 一、PHP 變量詳解
- 1.1輸出語句
- 1.2數(shù)據(jù)類型
- 1.四種基本類型
- 2.兩種復(fù)合類型
- 3.兩種特殊類型
- 1.3數(shù)據(jù)類型轉(zhuǎn)換
- 1.4數(shù)據(jù)類型檢測(cè)
- 1.5變量聲明創(chuàng)建
- 1.6變量命名規(guī)則
- 1.8變量賦值
- 1.8相關(guān)函數(shù)
- 1.9作用域
- 局部變量與局部作用域
- 全局變量與全局作用域
- 預(yù)定義變量和靜態(tài)變量
- 預(yù)定義變量(超全局變量)
- 靜態(tài)變量 (static)
- 二、PHP 常量詳解
- 2.1常量的聲明與使用
- 2.2預(yù)定義常量和魔術(shù)常量
- 預(yù)定義常量
- 魔術(shù)常量
前言:混一天和努力一天,一天看不出任何差別,三天看不到任何變化,七天也看不到任何距離…… 但是一個(gè)月后會(huì)看到話題不同,三個(gè)月后會(huì)看到氣場(chǎng)不同,半年后會(huì)看到距離不同,一年后會(huì)看到人生道路不同。
一、PHP 變量詳解
變量就是臨時(shí)存儲(chǔ)值的容器,它可以儲(chǔ)存數(shù)字、文本、或者一些復(fù)雜的數(shù)據(jù)等。變量的值在程序運(yùn)行中會(huì)隨時(shí)發(fā)生變化,能夠?yàn)槌绦蛑袦?zhǔn)備使用的一段數(shù)據(jù)起一個(gè)簡短容易記的名字,另外它還可以保存用戶輸入的數(shù)據(jù)或運(yùn)算的結(jié)果。
1.1輸出語句
在PHP中,可以使用echo 、 print 、 print_r 、 printf 、 sprintf 、 var_dump六種語句來實(shí)現(xiàn)輸出。
echo() 實(shí)際上不是一個(gè)函數(shù),是php語句,因此您無需對(duì)其使用括號(hào)。不過,如果您希望向 echo() 傳遞一個(gè)以上的參數(shù),那么使用括號(hào)會(huì)發(fā)生解析錯(cuò)誤。而且echo是返回void的,并不返回值,所以不能使用它來賦值。
說明:在平時(shí),echo或echo()的輸出是一樣的,只有在將多個(gè)參數(shù)傳遞給echo語句,進(jìn)行輸出時(shí),則使用括號(hào)將生成解析錯(cuò)誤。
print() 和 echo() 用法一樣,但是echo速度會(huì)比print快一點(diǎn)點(diǎn)。實(shí)際上它也不是一個(gè)函數(shù),因此您無需對(duì)其使用括號(hào)。print語句也可以實(shí)現(xiàn)輸出,且有返回值。當(dāng)輸出成功會(huì)返回1,失敗就會(huì)返回0;因此它可以在表達(dá)式中使用。
printf()函數(shù)也可以實(shí)現(xiàn)輸出,可以輸出普通的字符串,也格式化輸出字符串。例:
- %% – 返回百分比符號(hào)
- %b – 二進(jìn)制數(shù)
- %c – 依照 ASCII 值的字符
- %d – 帶符號(hào)十進(jìn)制數(shù)
- %e – 科學(xué)計(jì)數(shù)法(比如 1.5e+3)
- %u – 無符號(hào)十進(jìn)制數(shù)
- %f – 浮點(diǎn)數(shù)(local settings aware)
- %o – 八進(jìn)制數(shù)
- %s – 字符串
- %x – 十六進(jìn)制數(shù)(%x小寫字母%X大寫字母)
此函數(shù)使用方法和printf一樣,唯一不同的就是該函數(shù)把格式化的字符串寫寫入一個(gè)變量中,而不是輸出來。(他不會(huì)輸入內(nèi)容,而是返回格式化的字符串)
print_r()函數(shù)是用來輸出變量的,可以用人類容易讀取的格式來顯示這個(gè)變量的信息。
print_r有兩個(gè)參數(shù),第一個(gè)是變量,第二個(gè)可設(shè)為true,如果設(shè)為true,則會(huì)返回字符串,否則返回布爾值TRUE。
<?php$a="alice";$c = print_r($a); // 打印alice 返回布爾值true echo $c; // $c的值是TRUE// 第二個(gè)參數(shù)設(shè)置為true 可以將變量的信息轉(zhuǎn)換成一個(gè)字符串 不輸出到瀏覽器 用于線上調(diào)試,sql日志記錄 $c = print_r($a,true); // 不打印,返回字符串內(nèi)容 echo $c; // $c的值是字符串a(chǎn)lice$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));echo "</pre>"; print_r ($a); echo "</pre>"; ?>var_dump()函數(shù)用于輸出變量的內(nèi)容、類型、長度,可以顯示變量的結(jié)構(gòu)化信息,例如:類型、值。常用來開發(fā)階段的代碼調(diào)試。
輸出方式總結(jié):
- echo 可以輸出數(shù)字型和字符型。輸出布爾型的時(shí)候,true輸出的結(jié)果是1,false輸出的結(jié)果是空
- printf 可以輸出數(shù)字型、字符型、布爾型。輸出布爾型的時(shí)候,true輸出的結(jié)果為1,false輸出的結(jié)果為0。
- print_r可以輸出數(shù)字型、字符型、布爾型和數(shù)組。輸出布爾型的時(shí)候,true輸出的結(jié)果為1,false輸出的結(jié)果為空;輸出數(shù)組是以‘鍵’=>‘值’的形式。
- var_dump() 判斷一個(gè)變量的類型與長度,并輸出變量的數(shù)值,如果變量有值輸?shù)氖亲兞康闹挡⒒胤禂?shù)據(jù)類型。此函數(shù)顯示關(guān)于一個(gè)或多個(gè)表達(dá)式的結(jié)構(gòu)信息,包括表達(dá)式的類型與值。數(shù)組將遞歸展開值,通過縮進(jìn)顯示其結(jié)構(gòu)。
- die() 有兩個(gè)功能:先輸出內(nèi)容,然后退出程序。一般用于數(shù)據(jù)庫連接的判斷,一旦執(zhí)行die()后面的內(nèi)容將不執(zhí)行。
mysql_connect(“l(fā)ocahost”,“root”,“root”) or die(“鏈接服務(wù)器失敗!”);
ob_clean() 為一個(gè)可以清空輸出緩沖區(qū)內(nèi)容的內(nèi)置函數(shù)
file_put_contents(‘log.text’,$res);函數(shù)把一個(gè)字符串寫入文件中
1.2數(shù)據(jù)類型
PHP 中的數(shù)據(jù)類型可以分為三大類,分別是標(biāo)量數(shù)據(jù)類型、復(fù)合數(shù)據(jù)類型和特殊數(shù)據(jù)類型
| 基本類型 | 布爾,字符串,數(shù)值(整數(shù)和浮點(diǎn)數(shù)) |
| 復(fù)合類型 | 數(shù)組, 對(duì)象 |
| 特殊類型 | null, 資源, 回調(diào),閉包 |
1.四種基本類型
- 整數(shù)型(integer)
- 浮點(diǎn)數(shù)型(float)
- 布爾型(boolean)
- 字符串(string)
| string | 字符串是連續(xù)的字符序列 |
| integer | 整型包含所有的整數(shù),可以是正數(shù)也可以是負(fù)數(shù) |
| float | 浮點(diǎn)型表示整數(shù)外它還可以用來表示小數(shù)和指數(shù) |
| boolean | 布爾型 |
2.兩種復(fù)合類型
- 數(shù)組(array)
- 對(duì)象(object)
數(shù)組是一組數(shù)據(jù)的集合,是將數(shù)據(jù)按照一定規(guī)則組織起來形成的一個(gè)整體。數(shù)組的本質(zhì)是存儲(chǔ)管理和操作一組變量。按照數(shù)組的維度劃分,可以有一維數(shù)組、二維數(shù)組和多維數(shù)組。我們可以使用 array() 函數(shù)來創(chuàng)建數(shù)組。
// array數(shù)組 array(鍵(key)=>值(value),鍵(key)=>值(value),……) // 默認(rèn)索引 0 1 2 3(索引數(shù)組) $arr1 = [12,13,18,62,85];// 指定數(shù)組的鍵 也就是索引.類似于js中的對(duì)象字面量(關(guān)聯(lián)數(shù)組) $arr2 = ["id"=>1,"name"=>"zhang","age"=>18,"gender"=>'man']; $user = array("id"=>1,"name"=>"zhang","age"=>18,"gender"=>'man');var_dump($arr1,$arr2); // array(5) { [0]=> int(12) [1]=> int(13) [2]=> int(18) [3]=> int(62) [4]=> int(85) } // array(3) { ["id"]=> int(1) ["name"]=> string(5) "zhang" ["age"]=> int(18) ["gender"]=> string(man) }$arr = array('a','b','c','d','e'); // 在最后增加一項(xiàng) $arr[] = "f"; // 打印數(shù)組 vprintf('Array ( [0] => %s [1] => %s [2] => %s [3] => %s [4] => %s [5] => %s ) ',$arr); // 輸出效果一樣 用于打印數(shù)組 print_r($arr); // Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f ) echo $arr[0],'<br >'; // a echo $arr[1],'<br >'; // b echo $arr[5],'<br >'; // f// 遍歷索引數(shù)組 for($i=0;$i<count($arr);$i++) {echo $arr[$i],'<br >'; }// foreach是專門用來循環(huán)數(shù)組的 foreach ($variable as $key => $value) {# code... } // foreach 里面的鍵值的變量名($k,$v) 為任意合法的變量名 $arr = array('name'=>'zhangsan' , 'age'=>24 , 'area'=>'Beijing'); foreach($arr as $k=>$v) {echo $k,':',$v,'<br >'; } // 注意:我們可以省略其中的鍵,只打印值,但無法只打印鍵 // array_keys — 返回?cái)?shù)組中所有的鍵名 print_r(array_keys(arr2)); // 返回鍵名組成的數(shù)組對(duì)象(Object)可以用于存儲(chǔ)數(shù)據(jù)。在 PHP 中對(duì)象必須聲明。首先必須使用 class 關(guān)鍵字聲明類對(duì)象。類是可以包含屬性和方法的結(jié)構(gòu)。然后在類中定義數(shù)據(jù)類型,在實(shí)例化的類中使用數(shù)據(jù)類型。
在支持面向?qū)ο蟮恼Z言中,可以把各個(gè)具體事物的共同特征和行為抽象成一個(gè)實(shí)體,稱之為一個(gè)“類”,而對(duì)象是類使用 new 關(guān)鍵字實(shí)例化后的結(jié)果。
class Car //使用 class 聲明一個(gè)類對(duì)象{private $color; // 變量=》屬性// 函數(shù)=》方法public function setCar($color="black") {// $this 表示當(dāng)前對(duì)象$this->color = $color;}public function getColor() {return $this->color;}}$car1 = new Car(); // 實(shí)例化對(duì)象// 實(shí)例化名稱->成員屬性方法$car1->setCar('red'); // 設(shè)置$color的值redecho $car1->getColor(); // 獲取$color的值 red$car2 = new Car();$car2->setCar();echo $car2->getColor(); // black3.兩種特殊類型
- 空值 NULL
- 資源 (resource)
1.3數(shù)據(jù)類型轉(zhuǎn)換
PHP數(shù)據(jù)類型轉(zhuǎn)換分為自動(dòng)轉(zhuǎn)換(隱式轉(zhuǎn)換)和強(qiáng)制轉(zhuǎn)換(顯示轉(zhuǎn)換),強(qiáng)制轉(zhuǎn)換又分為臨時(shí)轉(zhuǎn)換和永久轉(zhuǎn)換。
| 臨時(shí)轉(zhuǎn)換 | (int),(string),(array),(object)… |
| 強(qiáng)制轉(zhuǎn)換 | settype(數(shù)據(jù),類型) |
| 自動(dòng)轉(zhuǎn)換 | 根據(jù)操作符對(duì)操作數(shù)的類型要求進(jìn)行 |
臨時(shí)轉(zhuǎn)換用小括號(hào)的形式,我們可以通過(int)都是這樣的形式轉(zhuǎn)換成整型,或者轉(zhuǎn)換成浮點(diǎn)型(boolean)縮寫(bool),還可以轉(zhuǎn)換成數(shù)組,(array)的形式轉(zhuǎn)換成數(shù)組,還可以轉(zhuǎn)換成對(duì)象。
臨時(shí)轉(zhuǎn)換和永久轉(zhuǎn)換總結(jié)
<?php //臨時(shí)轉(zhuǎn)換 $var = true; var_dump($var); $res = (int)$var; var_dump($res); var_dump((int)$var, (integer)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成浮點(diǎn)型 var_dump((float)$var, (double)$var, (real)$var); echo "<br>";$var = 3.6; //舍掉小數(shù)部分 var_dump((int)$var, (integer)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成字符串型 $var = true; var_dump((string)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成布爾類型 $var = "3xuxiaoke"; var_dump((bool)$var, (boolean)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成空 $var = "空"; var_dump((unset)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成數(shù)組 $var = 123; var_dump((array)$var); echo "<br>";//臨時(shí)轉(zhuǎn)換成對(duì)象 $var = 12.3; var_dump((object)$var); echo "<br>";//通過系統(tǒng)函數(shù)完成臨時(shí)轉(zhuǎn)換(類型+val()) $var = "3xuxiaoke"; $res = intval($var); var_dump($res); echo "<br>";var_dump(floatval($var), doubleval($var)); echo "<br>";echo "<hr/>";//永久轉(zhuǎn)換------------------------------------ $var = 123;var_dump($var); echo "<br>";echo gettype($var); echo "<br>";$var = true;echo gettype($var); echo "<hr/>";$var = 123; var_dump($var); echo "<br>";settype($var, "boolean"); var_dump($var); echo "<br>";/*type 的可能值為: “boolean” (或?yàn)椤癰ool”) “integer” (或?yàn)椤癷nt”) “float” (或?yàn)椤癲ouble”) "string" "array" "object" “null” */$var = "3xuxiaoke"; echo settype($var, "int")."</br>"; echo floatval($var)."</br>"; echo gettype($var)."</br>";// settype(數(shù)據(jù),類型) 設(shè)置類型 gettype(數(shù)據(jù)) 獲取類型程序會(huì)根據(jù)上下文環(huán)境自動(dòng)進(jìn)行轉(zhuǎn)換
其它類型轉(zhuǎn)換成布爾型
- 0>-false
- 0.0>-false
- 空字符串“或者”或者“0”或者“0”>-false
- null>-false
- 空數(shù)組array()>-false
1.4數(shù)據(jù)類型檢測(cè)
在JavaScript中,使用typeof可以檢測(cè)基本數(shù)據(jù)類型,使用instanceof可以檢測(cè)引用數(shù)據(jù)類型。在PHP中,也有檢測(cè)數(shù)據(jù)類型的方法,具體如下:
| 標(biāo)量 | is_int(),is_string(),is_bool()… |
| 復(fù)合 | is_array(),is_object() |
| 特殊 | is_null(),is_resource() |
1.5變量聲明創(chuàng)建
因?yàn)?PHP 是一種弱類型的語言,所以使用變量前不用提前聲明,變量在第一次賦值時(shí)會(huì)被自動(dòng)創(chuàng)建,這個(gè)原因使得 PHP 的語法和C語言、Java 等強(qiáng)類型語言有很大的不同。
聲明 PHP 變量必須使用一個(gè)美元符號(hào)“$”后面跟變量名來表示,然后再使用“=”給這個(gè)變量賦值。如下所示:
<?php$a = 1;$b = 2;$c = 3;echo $a.', '.$b.', '.$c; // 1,2,3 ?>1.6變量命名規(guī)則
變量名并不是可以隨意定義的,一個(gè)有效的變量名應(yīng)該滿足以下幾點(diǎn)要求:
- 變量必須以 $ 符號(hào)開頭,其后是變量的名稱,$ 并不是變量名的一部分;
- 變量名必須以字母或下劃線開頭;
- 變量名不能以數(shù)字開頭;
- 變量名只能包含字母(Az)、數(shù)字(09)和下劃線(_);
- 與其它語言不同的是,PHP 中的一些關(guān)鍵字也可以作為變量名(例如 true、true、true、for)。
- 標(biāo)識(shí)符分為:預(yù)定義(保留字、關(guān)鍵字,class,public)和自定義的。
注意:PHP 中的變量名是區(qū)分大小寫的,函數(shù)名不區(qū)分大小寫,因此 $var 和 $Var 表示的是兩個(gè)不同的變量。
$_str = "PHP是世界上最好的語言"; // 變量名為:_str,變量值為:PHP是世界上最好的語言當(dāng)使用多個(gè)單詞構(gòu)成變量名時(shí),可以使用下面的命名規(guī)范:
- 下劃線命名法:將構(gòu)成變量名的單詞以下劃線分割,例如 getusername、get_user_name、getu?sern?ame、set_user_name;
- 駝峰式命名法(推薦使用):第一個(gè)單詞全小寫,后面的單詞首字母小寫,例如 getUserName、getUserName、getUserName、getDbInstance;
- 帕斯卡命名法:將構(gòu)成變量名的所有單詞首字母大寫,例如 Name、Name、Name、MyName、$GetName。
1.8變量賦值
就是用不同的名字訪問同一個(gè)變量內(nèi)容。當(dāng)改變其中任何一個(gè)變量的值,另一個(gè)也會(huì)發(fā)生變化。引用賦值使用“&”來表示引用。
<?php //php引用變量:不同變量名指向同一地址// 傳值賦值 //定義一個(gè)變量a,此時(shí)內(nèi)存開辟了一塊區(qū)域,$a指向該區(qū)域 $a = 100; //定義變量b,將a變量的值賦值給b,此時(shí)該區(qū)域有兩個(gè)變量($a和$b)指向。 $b = $a; printf("a=%d,b=%d",$a,$b); // a=10 b=10//修改$a變量的值,php變量具有Copy On Write的特性,所以會(huì)復(fù)制并重寫a所指向的區(qū)域值,此時(shí)a和b分別指向不同區(qū)域。 $a = 10; printf("a=%d,b=%d",$a,$b); // a=10 b=100// ------------------------// 引用賦值 &地址引用符 $c = 100; $d = &$c; $c = 10; printf("c=%d,d=%d",$c,$d); // c=10 d=10 //當(dāng)引用指向時(shí),php變量不在具有Copy On Write特性,且指向同一內(nèi)存區(qū)域,無論$c或$d誰變化,另外一個(gè)都會(huì)變化unset($c); // 僅僅是將$c與$d取消關(guān)聯(lián),$d依然可以用 var_dump($d); // int(10)// -------------------------------// 可變變量 使用兩個(gè)美元符號(hào)($) $a = "hello"; $$a = "world"; var_dump($a); // string(5) "hello" var_dump($hello); // string(5) "world" // 兩個(gè)變量都被定義了:$a 的內(nèi)容是“hello”,并且 $hello 的內(nèi)容是“world”。 // 因此,可以表述為:echo “$a ${$a}”;或者 echo “$a $hello”;它們都會(huì)輸出:hello world1.8相關(guān)函數(shù)
- ob_clean() 為一個(gè)可以清空輸出緩沖區(qū)內(nèi)容的內(nèi)置函數(shù)
- file_put_contents() 函數(shù)把一個(gè)字符串寫入文件中
- unset() 函數(shù)用于銷毀釋放給定的變量
- die(“字符串”)和exit(“字符串”)都是中止腳本執(zhí)行函數(shù)
- isset()與empty() 用來檢測(cè)變量是否聲明和是否為空
1.9作用域
變量的作用范圍(可以被使用的范圍)稱為變量作用域,變量必須在其有效范圍內(nèi)使用,如果超出有效范圍,變量就會(huì)失去其意義。按作用域可以將 PHP 變量分為全局變量和局部變量兩種。
可以在當(dāng)前源碼中任何地方(函數(shù)外部)使用的變量稱為全局變量,它們具有全局作用域;只能在對(duì)其進(jìn)行定義的函數(shù)內(nèi)部使用的變量稱為局部變量,它們具有局部作用域。
局部變量與局部作用域
局部變量就是在函數(shù)的內(nèi)部定義的變量,它只能在定義它的函數(shù)內(nèi)使用。局部變量會(huì)在函數(shù)調(diào)用結(jié)束時(shí)自動(dòng)銷毀。
<?phpfunction example(){$a = "php中文網(wǎng)"; // 在函數(shù)內(nèi)定義變量 aecho "局部變量 a 的值為:".$a."<br>";}example();if(isset($a)){ // 在函數(shù)外部調(diào)用 $a,如果 $a 存在則會(huì)打印下面的內(nèi)容echo "在函數(shù)外部調(diào)用函數(shù)內(nèi)的局部變量 a,其值為:".$a;} // 只打印了函數(shù)體內(nèi)的 “局部變量 a 的值為:php中文網(wǎng)” ?>全局變量與全局作用域
全局變量就是定義在所有函數(shù)以外的變量,其作用域是當(dāng)前源碼的任何地方,但是在函數(shù)內(nèi)部是不可用的。在程序運(yùn)行期間全局變量會(huì)一直存在,只有程序結(jié)束運(yùn)行時(shí)才會(huì)被銷毀。
<?php$a = "php中文網(wǎng)"; // 在函數(shù)外部定義全局變量 afunction example(){if(isset($a)){echo "在函數(shù)內(nèi)部調(diào)用全局變量 a,其值為:".$a;}}example();echo "在函數(shù)外部調(diào)用全局變量 a,其值為:".$a; // 只打印了函數(shù)體外的 “在函數(shù)外部調(diào)用全局變量 a,其值為:php中文網(wǎng)” // 通過運(yùn)行結(jié)果可以看出,在函數(shù)內(nèi)部并沒有成功調(diào)用到 $a,但是在函數(shù)外部可以。// -------------在函數(shù)體內(nèi)使用外部全局變量 // 1. 在函數(shù)體內(nèi)調(diào)用全局變量需要使用global關(guān)鍵字引用function example(){global $a; // 在函數(shù)體內(nèi)通過global關(guān)鍵字引用外部全局變量if(isset($a)){echo "在函數(shù)內(nèi)部調(diào)用全局變量 a,其值為:".$a;}} // 2.使用超全局變量$GLOBALS['variable']function example(){if(isset($GLOBALS['a'])){echo "在函數(shù)內(nèi)部調(diào)用全局變量 a,其值為:".$GLOBALS['a'];}} ?>預(yù)定義變量和靜態(tài)變量
預(yù)定義變量(超全局變量)
預(yù)定義變量又叫超全局變量,它們不需要提前聲明就可以在所有的作用域中使用。通過這些預(yù)定義變量可以獲取用戶會(huì)話、用戶操作系統(tǒng)的環(huán)境和本地操作系統(tǒng)的環(huán)境等信息。
常用的預(yù)定義變量如下所示:
- $GLOBALS:全局作用域中的全部可用變量;
- $_SERVER:服務(wù)器和執(zhí)行環(huán)境的信息;
- $_REQUEST:包含了 GET,_GET,G?ET,_POST 和 $_COOKIE 的所有信息;
- $_POST:通過 POST 方法提交的數(shù)據(jù);
- $_GET:通過 GET 方法提交的數(shù)據(jù);
- $_FILES:通過 POST 方式上傳到服務(wù)器的文件數(shù)據(jù);
- $_ENV:通過環(huán)境方式傳遞給當(dāng)前腳本的變量組成的數(shù)組;
- $_COOKIE:通過 HTTP Cookies 方式傳遞給當(dāng)前腳本的變量所組成的數(shù)組;
- $_SESSION:當(dāng)前腳本可用 SESSION 變量組成的數(shù)組。
$GLOBALS 是一個(gè)包含了全局作用域中所有變量的數(shù)組,變量的名字就是數(shù)組的鍵。
<?php$name = 'php中文網(wǎng)';$title = 'PHP 預(yù)定義變量';function demo(){static $str = 'PHP 教程';$url = 'http://www.php.cn';}echo "<pre>";var_dump($GLOBALS);echo "</pre>"; /* array(7) {["_GET"]=>array(0) {}["_POST"]=>array(0) {}["_COOKIE"]=>array(0) {}["_FILES"]=>array(0) {}["GLOBALS"]=>array(7) {["_GET"]=>array(0) {}["_POST"]=>array(0) {}["_COOKIE"]=>array(0) {}["_FILES"]=>array(0) {}["GLOBALS"]=>*RECURSION*["name"]=>string(12) "php中文網(wǎng)"["title"]=>string(19) "PHP 預(yù)定義變量"}["name"]=>string(12) "php中文網(wǎng)"["title"]=>string(19) "PHP 預(yù)定義變量" } // 注意:$GLOBALS 中并不包含函數(shù)中的局部變量和靜態(tài)變量。 */ ?>靜態(tài)變量 (static)
靜態(tài)變量是一個(gè)特殊的局部變量,通過前面的學(xué)習(xí)我們知道,在函數(shù)內(nèi)部定義一個(gè)局部變量,函數(shù)調(diào)用結(jié)束之后這個(gè)變量就會(huì)被銷毀,不能繼續(xù)使用了。而靜態(tài)變量不同,靜態(tài)變量在初始化之后,會(huì)在程序運(yùn)行期間會(huì)一直存在。
和局部變量相比,靜態(tài)變量具有一下特點(diǎn):
- 當(dāng)函數(shù)執(zhí)行完畢后,靜態(tài)變量不會(huì)消失;
- 靜態(tài)變量只能在函數(shù)內(nèi)部使用;
- 靜態(tài)變量只會(huì)被初始化一次;
- 靜態(tài)變量初始化的值可以省略,默認(rèn)值為 null;
- 靜態(tài)變量的初始值只能是具體的字符串、數(shù)值等,而不能是一個(gè)表達(dá)式。
定義靜態(tài)變量需要用到 static 關(guān)鍵字了,使用方法如下:
static 變量 = 值;
定義一個(gè)靜態(tài)變量來記錄函數(shù)調(diào)用的次數(shù),另外再定義一個(gè)局部變量與靜態(tài)變量做對(duì)比,具體代碼如下:
<?php// 靜態(tài)變量并不是說它的值是不能改變的,不能改變值的那叫常量。 其實(shí)靜態(tài)變量的值是可以改變的,而且它會(huì)保持最新的值。之所以稱為靜態(tài),是因?yàn)樗粫?huì)隨著函數(shù)的調(diào)用和退出而發(fā)生變化。即上次調(diào)用函數(shù)的時(shí)候,如果我們給靜態(tài)變量賦予某個(gè)值的話,那么下次函數(shù)調(diào)用時(shí),這個(gè)值是保持不變。function demo(){static $a = 0;$b = 0;$a++;$b++;echo '第 '.$a.' 次運(yùn)行 demo 函數(shù), 局部變量 $b 的值為:'.$b.'<br>';}demo();demo();demo();demo(); /* 第 1 次運(yùn)行 demo 函數(shù), 局部變量 $b 的值為:1 第 2 次運(yùn)行 demo 函數(shù), 局部變量 $b 的值為:1 第 3 次運(yùn)行 demo 函數(shù), 局部變量 $b 的值為:1 第 4 次運(yùn)行 demo 函數(shù), 局部變量 $b 的值為:1 */ ?>二、PHP 常量詳解
所謂常量就是不能改變的量,PHP 中常量一旦被定義,就不能被修改或取消定義。
PHP 常量通常用來存儲(chǔ)一個(gè)不被改變也不希望變化的數(shù)據(jù),該數(shù)據(jù)只能是四種標(biāo)量數(shù)據(jù)類型的數(shù)據(jù):整型、浮點(diǎn)型、字符串、布爾型,不過從 PHP7 開始常量支持了數(shù)組(array)類型。
與變量相比,常量具有以下幾個(gè)特點(diǎn):
- 常量前面沒有美元符號(hào)($);
- 常量只能用 define() 和 const 定義;
- 常量、類、接口、函數(shù)的作用域都是全局的;
- 常量一旦被定義就不能被重新定義或者取消定義。
- 常量名稱推薦全部為大寫字母
2.1常量的聲明與使用
- define(): 函數(shù)
- const: 關(guān)鍵字
2.2預(yù)定義常量和魔術(shù)常量
預(yù)定義常量
定義常量顧名思義也就是 PHP 中預(yù)先定義好的常量,使用這些預(yù)定義常量可以幫助我們來獲取一些 PHP 中的信息,比如,我們可以使用預(yù)定義常量來獲取當(dāng)前電腦的操作系統(tǒng),當(dāng)前使用的 PHP 版本信息等等。另外需要注意的是預(yù)定義常量是區(qū)分大小寫的。
查看系統(tǒng)預(yù)定義常量:echo "<pre>".print_r(get_defined_constants(true),true)."</pre>";
下面列舉了一些 PHP 中的預(yù)定義常量:
- PHP_VERSION:當(dāng)前 PHP 的版本號(hào);
- PHP_OS:當(dāng)前的操作系統(tǒng)名稱;
- PHP_EOL:系統(tǒng)換行符,Windows 是(\r\n),Linux 是(\n),MAC 是(\r);
- PHP_INT_MAX:當(dāng)前 PHP 支持的最大整數(shù);
- PHP_INT_MIN:當(dāng)前 PHP 支持的最小整數(shù);
- PHP_EXTENSION_DIR:PHP 的擴(kuò)展目錄;
- TRUE:布爾類型的 true;
- FALSE:布爾類型的 false;
- NULL:Null 值。
魔術(shù)常量
魔術(shù)常量屬于特殊的預(yù)定義常量,這些常量可以根據(jù)它們的使用位置而變化。魔術(shù)常量通常以兩個(gè)下劃線__開頭,并以兩個(gè)下劃線__結(jié)尾。
PHP 中魔術(shù)常量有八個(gè),如下所示:
- __LINE__ :文件中的當(dāng)前行號(hào);
- __FILE__:當(dāng)前文件的絕對(duì)路徑(包含文件名);
- __DIR__:當(dāng)前文件的絕對(duì)路徑(不包含文件名),等價(jià)于 dirname(__FILE__);
- __FUNCTION__:當(dāng)前函數(shù)(或方法)的名稱;
- __CLASS__:當(dāng)前的類名(包括該類的作用區(qū)域或命名空間);
- __TRAIT__:當(dāng)前的 trait 名稱(包括該 trait 的作用區(qū)域或命名空間);
- __METHOD__:當(dāng)前的方法名(包括類名);
- __NAMESPACE__:當(dāng)前文件的命名空間的名稱。
注意:與預(yù)定義常量不同,魔術(shù)常量是不區(qū)分大小寫的。
<?phpecho "<br/>當(dāng)前文件的根路徑:".__dir__;echo "<br/>當(dāng)前文件的路徑:".__FILE__;echo "<br/>當(dāng)前的行數(shù):".__LINE__;echo "<br/>當(dāng)前PHP的版本信息:".PHP_VERSION;echo "<br/>當(dāng)前的操作系統(tǒng):".PHP_OS; /* 當(dāng)前文件的根路徑:E:\zhang\0426 當(dāng)前文件的路徑:E:\zhang\0426\demo.php 當(dāng)前的行數(shù):4 當(dāng)前PHP的版本信息:7.2.31 當(dāng)前的操作系統(tǒng):WINNT */ function getName(){echo "<br>當(dāng)前函數(shù)名稱:".__FUNCTION__; } getName(); // 當(dāng)前函數(shù)名稱:getNameclass Person{public function walk(){echo "當(dāng)前類名為 ".__CLASS__;echo "當(dāng)前類名和方法名為 ".__METHOD__;} } $zhang = new Person; $zhang->walk(); // 當(dāng)前類名為 Person 當(dāng)前類名和方法名為 Person::walk ?>總結(jié)
以上是生活随笔為你收集整理的【php基础入门】细说php的变量以及常量的知识点详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: elastic search java_
- 下一篇: CodeForces 580A Kefa