書接上回:後端開發技術教學(一) [附2025最新可用 phpstudy2018下載鏈接] -CSDN博客
必要資源:
trae中文版下載網址:?TRAE - The Real AI Engineer
phpStudy 2018 :?phpStudy - Windows 一鍵部署 PHP 開發環境 · 小皮出品
目錄
一、條件指令
? ? ? ? 1.1?if()
????????????????*假條件
? ? ? ? 1.2 elseif()
? ? ? ? 1.3 else
二、循環結構
? ? ? ? 2.1 while()
? ? ? ? 2.2 do…while()
????????2.3 for
? ? ? ? 2.4 switch
三、定義函數(function)
四、標準函數
? ? ? ? 4.1 isset()
? ? ? ? 4.2 empty()
? ? ? ? 4.3 md5();
? ? ? ? 4.4 include() & include_once()
? ? ? ????????? i.) include()
? ? ? ? ? ? ? ? ii.) include_once()
? ? ? ? 4.5 require() & require_once()
五、數組
? ? ? ? 5.1?索引數組
? ? ? ? 5.2 關聯數組
? ? ? ? 5.3 二 / 多維數組
六、數組循環
? ? ? ? 6.1 foreach()
七、小結
? ? ? ? 上回我們說了PHP的基本語法哈,那麼我們這期就來探討一下PHP的條件指令、循環結構和定義函數。
一、條件指令
? ? ? ? 條件指令會判斷某指定條件是否被滿足,只有判斷結果為'true'才會執行命令。
? ? ? ? 1.1?if()
=> 如果…是對的,就…
if(條件){<代碼>;
}
if(4>3){echo "hello world"; //若4大於3是對的,就輸出"hello world"
}
::輸出:hello world
*若條件未滿足,則會無視該代碼。
? ? ? ??
假條件
::如果if(條件)裡 ,條件為:
1.) 為0的數字
2.) 0.0
3.) 不存在數組/對象
4.) 只有"" / ''
5.) 條件錯誤(e.g 3大於4)
=>條件為假
?
*string有任何字符都為真 //string="…"e.g if("0")=>為真if(" ")=>為真 //空格也算字符if("") =>為假if(0) =>為假
=> 即只要不違反上面那5個原則,條件都是對的。
if(4) => 條件為真
if("abc") => 條件為真
? ? ? ? 1.2 elseif()
=> 跟if一樣效果,因為不能同時用2個if,所以就要用elseif。
if(條件1){<指令a>; //若條件1被滿足,執行指令a
}elseif(條件2){<指令b>; //若條件2被滿足,執行指令b
}
$num=10;if($num==9){echo "hello world";
}elseif($num==10){echo "good morning";
}
::輸出:good morning
=> 若兩個條件同時滿足,則只執行第一個滿足條件的代碼塊。
? ? ? ? 1.3 else
=> 若所有條件都沒被滿足,就運行else下的指令。通常跟if和elseif一起用。
if(條件1){<指令a>;
}elseif(條件2){<指令b>;
}else{ ::若條件 1 & 2 都沒被滿足(都為假),就會執行<指令c><指令c>;
}
$num="xiaofong";if($num==9){echo "hello world";
}elseif($num==10){echo "good morning";
}else{echo "I love u";
}
::輸出:I love u
二、循環結構
? ? ? ? 循環結構跟條件指令差不多哈,都是會判斷條件是否正確後再執行指令。可不同的在於條件指令只會判斷一次條件,而循環結構會一直判斷條件、一直執行指令,直到條件為假為止。
? ? ? ? 2.1 while()
=> while=當,即當條件被滿足時,就執行指令,一直重複直到條件為假為止。
while(條件){<指令>;
}
while(4>3){echo "hi ";
}
::會一直輸出hi hi hi hi hi hi hi hi hi hi…
=> 這有甚麼用呢?比如你要輸出1-10,正常做法是一個一個的echo 1 echo 2…,很麻煩。但用while就會方便很多
//輸出1-10echo 1;echo 2;echo3;echo …
::爛方法$num=1;
while($num<=10){ //當$num小於等於10時,條件為真echo $num;$num++; //每輸出完一次數字之後,都會把數值加一(遞增)
}
::輸出:12345678910
? ? ? ? 2.2 do…while()
=> 先執行一次命令,再判斷條件,條件為真才繼續執行後面的命令。
do{<指令1>; ::先執行<指令1>
}while(條件); ::再判斷條件,若條件為假會跳出循環 ::條件為真則繼續執行do中的<指令1>
$num=4;do{echo $num;
}while($num==1); //即使條件不成立,也會先輸出一次
::輸出:4do{echo $num;$num++;
}while($num<=10); //一直執行直到條件為假
::輸出:45678910
????????2.3 for
=> for跟while是差不多的,可以說for是while的縮寫版。
for(初始值;判斷條件;每次循環結束的動作){<指令>;
}
for($a=0;$a<=5;$a++)
::初始值$a是0
::當$a小於等於5時,重複循環
::每次循環結束後,$a的值加一(遞增)for($a=0;$a<=5;$a++){echo $a;
}
::輸出:012345
? ? ? ? 2.4 switch
=> switch用於根據某變量的值執行不同的代碼塊。比多個 if & elseif 語句更簡潔清晰。特別適合處理多個固定選項的場景。複雜場景一律用 if-elseif。
switch ($變量) { case 值1:// 當變量的值等於值1時執行的代碼break;case 值2:// 當變量的值等於值2時執行的代碼break;// ... 更多 case ...default:// 沒有匹配項時執行的代碼
}
-
break:終止 switch 執行(防止同時執行2個case)
-
default:所有 case 都不匹配時執行的代碼
$day = "Wed";switch ($day) {case "Mon":echo "星期一";break;case "Tue":echo "星期二";break;case "Wed":echo "星期三";break;case "Thu":echo "星期四";break;default:echo "周末";
}::輸出:星期三
=> 用switch來處理單變量多固定值匹配
$userLevel = 2;switch ($userLevel) {case 1:case 2: // 1 和 2 執行相同代碼echo "普通用戶";break;case 3:echo "VIP用戶";break;default:echo "未知用戶";
}::輸出:普通用戶
=> 共用代碼
$score = 85;switch (true) {case ($score >= 90):echo "A";break;case ($score >= 80): // 會執行這個代碼塊echo "B"; // 輸出 B// 注意:這裡沒有 break!case ($score >= 70):echo "C"; // 也會輸出 C(因為穿透)break;default:echo "D";
}
::輸出:BC
=> 只有switch能穿透執行,同時執行多個case的代碼塊。?
三、定義函數(function)
=> 有點像數學中的代數。
function <函數名>(型參數){<代碼塊>;
}<函數名>(實參數); //調用函數::型參數=變量
::實參數=用戶輸入的實際數據
function hi($name,$age){ //類似數據模版
? echo "good morning ";
? echo "我是$name\n";
? return "剛滿$age歲"; //只有用echo執行時才會觸發return,且return往後的代碼不會執行
? echo 'hello';
}hi("xiaofong",18); //$name="xiaofong" $age=18
<!-- 調用函數 --> //return不會執行=> echo 'hello'命令可被執行
::輸出:good morning 我是xiaofonghelloecho hi("xiaofong",18); //會執行return命令
::輸出:good morning 我是xiaofong 剛滿18歲 //echo 'hello'命令不會執行
//可直接在定義函數時賦值
function hi($name="訪客",$age)…hi($name,18); //可不輸入該數據也能調用函數hi("xiaofong",18); //若調用函數時再次輸入了數據,數據會被覆蓋//$name不再="訪客",而="xiaofong"
=> 可直接賦值
四、標準函數
????????是指被PHP賦值的固定函數,擁有固定的功能,且不可作為被定義對象。
? ? ? ? 4.1 isset()
=> 用於檢查變量是否已聲明,常用於避免因訪問未定義變量而引發的錯誤。
isset(變量名);
//變量是否被賦值(true/false)$name="xiaofong"
echo isset($name);
::輸出:1 //true=1 false=0(不顯示)echo isset($num); //$num未被賦值
::輸出: //輸出0時不會顯示
=> 變量存在時為true(正確)
? ? ? ? 4.2 empty()
=> 跟isset()作用差不多,用於測試變量是否為空。
empty();
//變量是否為空(true/false)$name="xiaofong";
echo empty($name); //$name不為空,所以empty()會輸出false
::輸出: //false=0,不會輸出
=> 變量不存在時才為true(正確),與isset()相反。
? ? ? ? 4.3 md5();
=> 把輸出結果加密成32位加密字符串。不可逆,但可以用彩虹表破解,因為同一輸出字串會生成一樣的密文。
=> 不會輸出"xiaofong",直接輸出密文。
? ? ? ? 4.4 include() & include_once()
=> 可以將另一文件上的代碼或字串引用到本文件上,常用於引用代碼版塊。
? ? ? ????????? i.) include()
????????=> 允許重複加載相同文件。且報錯時不會終止運行腳本。
include(文件名);
//與調用函數有點類似
? ? ? ? ? ? ? ? ii.) include_once()
? ? ? ? => 不允許重複加載相同文件,會無視重複的加載命令。報錯時也不會終止運行腳本。
include_once(文件名1);
include_once(文件名1); ::此命令會被無視
=> 加載文件不存在所以報錯,但不會影響後面命令的執行。
? ? ? ? 4.5 require() & require_once()
=> 與include & include_once的作用及用法幾乎一樣,分別在於require()報錯時會立即停止腳本的運作,即後面的命令不會再執行。
方法 | 錯誤處理 | 重複包含檢查 | 適用場景 |
---|---|---|---|
include | 警告,繼續執行 | ? 不檢查 | 可重複加載的非關鍵文件 |
include_once | 警告,繼續執行 | ? 檢查 | 避免重複定義的非關鍵文件 |
require | 錯誤,終止執行 | ? 不檢查 | 必須存在的可重複文件 |
require_once | 錯誤,終止執行 | ? 檢查 | 核心且唯一的關鍵文件 |
-
先使用?
require_once
?加載核心文件(如類庫、配置),確保依賴安全。 -
對模板片段等非關鍵內容用?
include
,需要避免重複時用?include_once
。
五、數組
? ? ? ? 類似列表,指多組數據結合在一起。由標與值組成。分為關聯數組及索引數組。
????????下標 (標記數據) | 值 (數據。可以是數字,也可以是字串) |
---|---|
????????[0]? 或? $name | ? ? ? ? xiaofong |
????????[1]? 或? $age | ? ? ? ? 18 |
????????[2]??或? $sex | ? ? ? ? male |
*下標的類型必須相同,即全部為數字,或全部是字符串。
? ? ? ? 5.1?索引數組
=> 即下標為數字的數組,給數據排號碼,方便拿數據。
//array[…]=數組$arr1=array(1,2,3,4,5);
print_r($arr1); //print_r專門用於輸出數組
::輸出:[0] => 1 //默認從0開始排起[1] => 2[2] => 3[3] => 4[4] => 5echo $arr1[4]; //拿第5個值(下標從0開始算起)
::輸出:5 //因為是輸出數字,所以要用echo
//可以修改下標$arr1=array(1,2=>"hi",3,4,5); //值可以是數字或字符串print_r($arr1);
::輸出:[0] => 1[2] => "hi" //標被從[1]改成了[2],往後的標也會改變[3] => 3 //若是用默認的[2],就會有2個[2],所以要往後稍一稍,變成[3][4] => 4 //同理可證[5] => 5
? ? ? ? 5.2 關聯數組
=> 下標為字符串或變量,類似為數據命名,方便找到數據。
$arr2=array("name"=>"xiaolin","age"=>18,"sex"=>"male");
::下標是字符串print_r($arr2);
::輸出:["name"] => "xiaofong"["age"] => 18["sex"] => "male"echo $arr2["name"];
::輸出:xiaofong
? ? ? ? 5.3 二 / 多維數組
=> 顧名思義,就是數組裡面有數組。
$arr1=array(
? array(1,2,3), //是用逗號隔開,不是用分號喔
? array(4,5,6),
? array(7,8,9),
)或$arr2=array[
? [1,2,3], //一樣的效果,會比較方便
? ["a"=>4,"b"=>5,"222"=>6],
? [7,8,9],
]
**因為值的類型是數組,所以不能用echo輸出,要用print_r()。(print_r()專門用於輸出數組)
//承上
print_r($arr2[1]["222"]);
//輸出第2個數組中,名為"222"的數據
::輸出:6
六、數組循環
? ? ? ? 如果用print_r()輸出數組,數據會以列表的方式輸出。而數組循環會將數據以句子的方式全部輸出。
? ? ? ? 6.1 foreach()
=> 把每行的標和組,以行列的方式輸出。
foreach(數組名 as $標=>$值){ <代碼塊>;
}
$arr=array("name:"=>"xf"," age:"=>18," sex:"=>"M");foreach($arr as $k=>$v){ //以$k代表下標,$v代表值(變量可以隨便寫,記得是 標=>值 就可以了)
? echo $k; //輸出標
? echo $v; //輸出值
}
::輸出:name:xf age:18 sex:M //輸出完最後一組數據就會停止輸出,不會一直下去print_r($arr);
::輸出:["name"] => "xf" //列表方式輸出["age"] => 18["sex"] => "M"
*若數據類型是數組,則要加下標( echo $v["…"] )
$arr1=array(
? array(1,2,3),
? array(4,5,6),
? array(7,8,9),
);foreach($arr1 $k=>$v){echo $k;echo $v[0]; //只輸出每個數組的第1個數據
}
::輸出:011427
七、小結
? ? ? ? 到這裡PHP語句也說的差不多了,大家只需要記住它們的功能和運作邏輯就可以了,實操可以讓AI幫忙寫代碼,至於怎麼操作在上一篇結尾說過了,我就不多說了。
? ? ? ? 下一篇小編會繼續跟大家探討PHP哈,而後我們會開始研究數據庫mysql的技術以及分析一些漏洞哈,大家敬請期待。