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