PHP 學習紀錄(二):PHP基礎知識
一、PHP基礎認識
1.PHP基礎標籤
PHP標記是一不對稱的雙標記,可以根據實際所處位置變成必要的不完整標記
PHP解釋器會將從標記開始,將標記內的所有內容當作PHP的代碼來解析
(1)標準規則
通常嵌入到HTML中的時候使用
<?php //代碼 ?>
(2)不標準規則
通常是獨立的PHP文件
<? //代碼 //沒有結束標記
(3)歷史規則
早期使用的標記
<? //代碼 ?>
2.PHP註釋
為了方便程序的迭代開發和管理,使用特定的符號將描述的自然語言進行標記
方便給開發人員理解代碼、不會給程序本身增加額外的效率損失
(1)單行註釋
<? //註釋 #註釋 ?>
(2)多行註釋
<? /*註釋開始 註釋結束*/ ?>
3.PHP語句結束符號
PHP代碼寫完後通常會有一個結束符號;";"
<? echo "hello world"; ?>
二、PHP基礎語法
PHP運行在計算機內存中,PHP將數據進行臨時的保存來進行處理,通過PHP內定的量來控制
分為兩種:變量、常量
1.PHP變量
PHP運行週期內,系統通過指定的標示符號"$",指向保存在內存中的數據
從而在代碼運行過程中通過標示符來獲得數據的使用
(1)變量命名規則
- 必須以$符號開頭
- 由字母、數字、下劃線組成
- 嚴格區分大小寫
- 數字不能開頭
- 變量命名應以需求響應(識別度高)
- 複雜的變量名可使用下劃線分隔表示
(2)變量命名使用
<? $abc =1; //定義且賦值,代表1 $abc = 'abc'; //重新定義,$abc代表'abc而不再代表1 echo abc; //訪問變量,輸出$abc代表的數據'abc',最終輸出字串abc var_dump(abc); //查詢變量名字長度、所保存的數據類型 unset(abc); //刪除$abc變量 ?>
(3)預定義變量:
- $_GET:用戶通過get方式提交數據
- $_POST:用戶通過post方式提交數據
- $_REQUEST:用戶通過get和post方式提交數據
- $_SERVER:用戶和服務器的基本訊息數據
- $_FILES:用戶提交的文件數據
- $_SESSION:session數據
- $_COOKIE:coookie數據
- $GLOBAL:所有權局變量(唯一一個不是下劃線開頭的預定義變量)
- $_ENV:環境數據
(4)變量傳值:
值傳遞:指的是將變量傳遞給另外一個變量,但兩個變量互不影響
引用傳遞:將變量所指向的內存地址賦值給另外一個變量,兩個變量指向同一個地址,任何一個修改都會影響到另外一個變量
2.PHP常量
變量的好處是可以隨時根據需求改變變量所代表的數據,常量則是一開始定義並賦值後,在整個腳本中不允許改變的量
(1)常量命名規則
- 通常以大寫字母表示
- 不需要使用 $ 符號開始
- 由字母、數字、下劃線組成,不能以數字開頭
- 複雜的常量名可使用下劃線分隔表示
(2)常量定義
通常使用 define 函數、或是 const關鍵字,而且必須在定義的時候就對其賦值
<? define('PI',3.1415926) define('SELF_PI',3) const FAMILY_NAME = 'Green' ?>
(3)常量命名使用
<? define('PI',3.1415926) define('-_-','Smile) echo PI; //訪問常量 echo -_- //錯誤:系統不能識別符號 //所有常量都可以使用constant函數 echo constant('-_-') //所有常量都可以採用這種方式訪問 ?>
(4)系統常量
在系統中有些東西程序員會使用到,但不允許被改變,所以系統定義了一些常量
- PHP_VERSION:PHP版本號
- PHP_INT_SIZE:PHP中int 數據所占用的內存字節數
- PHP_INT_MAX:PHP中int 數據所能表示的最大值
(5)魔術常量
系統有一些東西是在變化的,但不允許隨意變化,魔術常量隨著環境變化而變化,但這種變化是程序員不能控制的
魔術常量以雙下劃線開始、以雙下劃線結束
- __DIR__:當前文件所在路徑(絕對路徑)
- __FILE__:當前文件所在路徑(絕對路徑,包含文件名稱)
- __FUNCTION__:函數內部使用,包含函數的名字
- __CLASS__:類內部使用,表示類名
- __NAMESPACE__:命名空間內部使用,表示當前所屬命名空間
- __METHOOD__:類內部方法使用,表示當前方法名字
- __LINE__:當前所在行數
三、PHP數據類型
系統透過分門別類來管理數據,可以保證數據安全性、時限內存的有效利用
1.PHP數據類型
分為三大類八小類:
- 基本數據類型(標量數據類型):
- 整形(int/integer):存儲整數數據
- 浮點型(float):存儲小數數據和超過整形範圍的整數數據
- 布林型(bool/boolean):存儲布林類型數據,只有true和false兩個值
- 字符類型(string):存儲字符數據類型(最常見)
- 複合數據類型
- 數組型(array):存儲數組數據(多個數據存到一個變量中)
- 對象型(object):存放對象數據,由類實例化得到(面向對象)
- 特殊數據類型
- 資源型(resource):存儲外部資源數據(數據庫資源\文件資源)
- 空型(null):變量沒有存儲任何數據
2.數值型數據類型
(1)整形數據類型
整型採用8個字節存儲數據
<? //常見整形 $num1 = 123; $num2 = -50; //八進制,以0為前綴 $num3 = 0123 // 1*8^2+2*8^1+3*8^0 = 83 //十六進制,以0x為前綴 $num4 = 0x123 // 1*16^2+2*16^1+3*16^0 = 291 //二進制,以0b為前綴 $num5 = 0b1101 // 1*2^3+1*2^2+0*2^1+1*2^0 = 13 ?>
(2)小數型數據類型
整型採用8個字節存儲數據,浮點數也提供多種小數存儲方式
<? $f1 = 1.23 $f2 = 1.23e5 //1.23 * 10^5 ?>
3.布林數據類型
專門用於某些重視結果的數據,結果只有兩個值true、false
<? $b1 = True; //在PHP中不區分大小寫 $b2 = False; var_dump($b1,$b3); //bool(true),bool(false) ?>
4.字符串數據類型
(1)凡是用引號定義的數據,系統都理解為字符串
<? $s1 = '123'; $s2 = 'hello world'; ?>
(2)單引號、雙引號解析轉譯符號的區別:
單引號只能解析少量轉譯符號:\'、\
雙引號能解析較多轉譯符號:\$、\"、\n、\t
雙引號能夠解析嵌套在字符串中的PHP變量
<? $a = '你好'; $b = '世界 $a !'; $c = "世界 $a !"; echo $b; //世界 $a !,系統不能解析$a,當作普通字符串 echo $c; //世界 你好 !,系統解析了$c中的$a變量 ?>
(3)定界符號:nowdoc與heredoc
類似單雙引號的功能,可以處理更長的字符串,但內容不能寫註釋
<? $a = '你好'; //nowdoc $n = <<< 'END 哈囉 $a END; echo $n; //哈囉 $a //heredoc $h = <<< END 哈囉 $a END; echo $h; //哈囉 你好 ?>
(4)字符串查看
每個字符其實都有下標,可以通過下標來對字符串中的具體位置進行訪問
<? $str = 'hello world'; echo $str[0]; //h 第一個字母 echo $str[-1]; //d 倒數第一個字母 ?>
5.PHP數組
數組即數據的集合,使用一個變量代表,在一個數組中可以有多個數據稱為元素
元素的組成分為兩部分:下標(key)和值(value)
(1)定義數組:
- 使用array關鍵字來初始化數組
- 使用數組括號[]來初始化數組
- 使用變量跟[]來初始化數組(須給定值,一次只能增加一個)
(2)訪問數組:
- 訪問數組中的某個元素值,透過下標來進行訪問,從0開始
(3)數組特點:
- 數組中的的元素沒有數量限制,也就是數組不限定長度
- PHP中數組可以動態增加長度
- PHP中數組元素的值可以是任意數據類型
- PHP中數組下標可以是純數字(索引數組)、純字符串(關聯數組)、混和數字和字符串(混和數組)
(4)二維數組:
數組元素本身也是數組的情況,若數組元素皆為一維數組,則稱該數組為二維數組(建議不要超過三維)
(5)數組範例:
以下為各種數組範例:
<?php //使用關鍵字定義數組 $arr1 = array(); //可以不指定元素 $arr2 = array('name','age'); //使用[]定義數組 $arr3 = []; $arr4 = ['name','age']; //針對變量增加元素的方式定義數組 $arr5[] = 'name;' //訪問數組 $arr6 = ['name','age'] //實際上為[0 => 'name' , 1 => 'age'] //訪問name值 echo $arr6[0]; //索引數組 $arr7 = arry(1,2,3,4,5); //關聯數組 $arr8 = arry('name' => '張三', 'age' => 30, 'gender' => '男'); //混和數組 $arr9 = arry(1,2,'name' => '張三', 'age' => 30); //訪問:一樣使用下標 echo $arr7[1]; //2 echo $arr8['name']; //張三 //一維數組 $user1 = arry('name' => '張三', 'age' => 30); $user2 = arry('name' => '李三', 'age' => 40); $user3 = arry('name' => '高五', 'age' => 23); //二維數組 $users = array($user1,$user2,$user3); //訪問張三年齡 echo $users[0]['age']; ?>
6.類型判斷
系統透過指定的函數來獲取數據的類別,給出一個布林值的判定結果
透過系統函數判定數據類型:使用__is開頭,後面接著對應的數據類型
以下舉例幾個常用的判定函數:
<?php
$num = 100;
$str = '100';
//數值
$res = is_numeric($str);
var_dump($res); //bool(ture),is_numeric判定數據是否是數值或純數值的字符串
var_dump(is_scalar($num)); //bool(true),is_scalar判定數據是否是標量(基本數據類型)
var_dump(is_null($num)); //bool(false),is_null判定數據是否為NULL
?>
PHP作為後台語言要與用戶進行交互,需時刻警惕用戶提交的數據是否滿足需求
必要的時候還要確保用戶是否存在惡意操作
7.類型轉換
PHP中需要將一些不同類型的數據轉換成某個指定數據類型才能進行相關運算
PHP唯一種弱類型語言,有兩種轉換方式:自動轉換、強制轉換
(1)自動轉換
PHP根據要參與的運算場景來將不符合條件的數據類型轉換成目標數據類型
字符串轉換為數值規則:
- 第一個字符串是字母或其他特殊符號,結果為0
- 第一個字符是數字,可以依次往後保留直到不是數字為止
- 在數字往後推的情況下,碰到第二個小數點即結束(保留一個小數點)
以下為範例:
<?php $num = 5; $str = 1.2a35 echo $num + $str; //6.2 ?>
(2)強制轉換
在程序員開發過程中的某個特定節點下,需要對數據進行最終確認,這個時候就可以進行強制轉換
轉換方式為在數據變量前使用(目標數據類型)
以下為範例:
<?php $str = '1.2.3.4.3abc'; //強制轉換成數直 echo (float)$str; //1.2 ?>
四、PHP運算符
1.了解PHP運算符
PHP運算符是系統定義的特殊符號,系統碰到各種符號時,就會按照預定的方式實現某些運算
(1)賦值運算符
- 給變量或常量進行賦值的運算,把右邊的結果保存在左邊
- =:最常見的賦值運算
- +=(-=、*=、/=):左邊與右邊的運算結果相加(相減、相乘、相除),然後再把整個運算結果賦值給左邊
- /=:運算時右側結果不可為0,否則會報錯
- .=:"." 為字符連接操作符,表示左邊與右邊字符串連起來後賦值給左邊變量
(2)算術運算符
- 普通算術運算,需要符號兩邊都是數值
- +:加法運算,左右兩邊相加
- -:減法運算,左邊減去右邊
- *:承法運算,左邊乘以右邊
- /:除法運算,左邊除以右邊(右邊不能為0)
- %:取餘運算(取模運算):左邊除以右邊(右邊不能為0),不能整除部分的餘數
(3)錯誤抑制符
- 單目運算:將較低級的錯誤抑制,不報錯誤
- @:在可能出現錯誤的表達是之前使用
(4)比較運算符
- 用於兩個表達式的比較,比較的結果通常是true或false
- >:左邊大於右邊返回true,否則返回false
- <:左邊小於右邊返回true,否則返回false
- >=:左邊大於或等於右邊返回true,否則返回false
- <=:左邊大於或等於右邊返回true,否則返回false
- ==:左邊等於右邊返回true,否則返回false
- ===:左邊等於右邊,且兩邊數據類型一致(全等)返回true,否則返回false
- 進行比較的時候,除非是全等,否則系統會自動轉換變成統一類型再進行比較
(5)飛船運算符(PHP7)
- 飛船運算:類似組合比較運算中大於、等於、小於三種運算符於一身
- <=>:飛船運算,左邊大於右邊返回1,等於右邊返回0,小於右邊返回-1
(6)合併運算符(PHP7)
- 用於數據判斷取值操作
- ??:左邊表示要判定表達式,右邊表示判定不成功的默認結果
- 合併運算為一種短路運算,若已成功取得左邊表達式結果,右邊表達式就不會執行
- 合併運算只考慮值是否存在,無論結果是否為布林值的true或false
(7)邏輯運算符
- 用於針對運算結果進行賦值
- &&:邏輯與運算(也作and),左右兩邊結果都為true返回true,否則返回false
- ||:邏輯或運算(也作or),左右兩邊結果至少有一個為true返回true,否則返回false
- |:邏輯非運算,原來結果為true返回false,原來結果為false返回true
- 邏輯運算符(邏輯與和邏輯或)為一種短路運算,應先將可成功率較大的放在左邊,減少系統資源的消耗
(8)連接運算符
- 用於PHP的字符串運算
- . :將左右兩邊的字符串連接成一個字符串
(9)三目運算符
- 三個表達式組成的一個運算表達式
- 表達式1 ? 表達式2 : 表達式3
- 如果表達式1(通常為判斷式)成立,整個結果為表達式2,否則為表達式3
(10)自操作運算符
- 自動操作的運算方式
- ++/--:自增/自減,在原來的值上加1/減1
- 前置自操作:先自我運算,然後把最終自己的結果給其他運算
- 後置自操作:先把自己的結果給其他運算,然後自我運算
(11)運算符優先級
在PHP運算符中也有優先級的規定
以下為從中PHP中文手冊節錄
結合方向 | 運算符 | 附加信息 |
---|---|---|
無 | clone new | cloine和new |
左 | [ | array() |
權 | ** | 算術運算符 |
權 | ++ - 〜 (int) (float) (string) (array) (object) (bool) @ | 類型和遞增/遞減 |
無 | instanceof | 類型 |
權 | ! | 邏輯運算符 |
左 | * / % | 算術運算符 |
左 | + - 。 | 算術運算符和字符串運算符 |
左 | << >> | 位運算符 |
無 | < <= > > = | 比較運算符 |
無 | == != === !== <> <=> | 比較運算符 |
左 | & | 位運算符和引用 |
左 | ^ | 位運算符 |
左 | | | 位運算符 |
左 | && | 邏輯運算符 |
左 | || | 邏輯運算符 |
左 | ?? | 比較運算符 |
左 | ?: | ternary |
右 | = + = - = * = ** = / = 。= %= &= | = ^ = << = >> = | 賦值運算符 |
左 | and | 邏輯運算符 |
左 | xor | 邏輯運算符 |
左 | or | 邏輯運算符 |
留言列表