1.流程控制
PHP有三種流程控制結構:順序結構,分支結構,循環結構
默認的,代碼的執行結構都是順序結構。代碼一行一行從上往下執行。順序結構是程序代碼的最基本結構。
分支結構:一段代碼根據不同的條件執行不同的部分
PHP中有兩種基本分支結構:if分支結構,switch分支結構
If分支結構語法
If(條件表達式){
//當條件表達式返回結果為true的時候,執行裡面的語句塊
//語句塊
}
//如果條件表達式返回結果為false則不執行語句塊
以上被稱之為最簡分支結構
標準if結構
If(條件表達式){
//if語句塊
}else{
//else語句塊
}
複雜if結構
If(條件表達式1){
//if語句
}else if(條件表達式2){
//else if語句
}…{
}else{
//else語句塊
}
If分支結構原理
在PHP中允許else if和elseif兩種語法。兩種語法得到的結果完全一致。但是實現原理不同。
Else if:一次只有兩個結果,向下的其他比較都是在false之後再次產生,類似二叉樹
Elseif:產生一個平行結構,一個多節點的樹狀結構。
Switch分支結構
語法
Switch($falg){
Case 1:
//語句
Break;
Case 2:
//語句
Break;
Default:
//語句
Break;
}
結構和運行原理
什麼時候使用if結構,什麼時候使用switch結構?
大部分的情況下都可以使用。通常會這樣來區分使用:
如果條件是需要判斷大小或者範圍的,使用if分支結構
如果條件是規定具體值的,那麼使用switch
不推薦在switch中使用條件判斷(比較表達式)
注意:凡是能使用switch的都可以使用if來解決,但是不見得所有if能實現的switch都可以做到。如果switch中case對應的條件是個比較表達式的話,有可能出問題。
循環結構
某一段代碼需要重複執行
電腦要知道什麼時候結束執行,否則會一直執行下去,死循環。
注意:寫任何循環結構的時候都要保證循環不會出現死循環。
PHP提供了多種循環
For,while,do-while,foreach
For循環:知道具體循環次數
For(初始條件;條件範圍;條件變更){
//循環體
}
While循環:只要滿足條件,就可以無限循環
語法:
While(條件表達式){
//循環體
//循環變量的變化
}
Do-while循環:先執行循環體再判斷循環條件
語法:
Do{
//循環體
//循環條件變更
}while(條件表達式);
While和do-while的區別:do-while一定會執行一次循環體,而while不一定
Foreach:PHP中專門用來遍歷數組(關聯數組),後面講數組的時候再講。
For模擬while
2.模板語法
標籤語法,因為PHP是需要嵌入到html代碼中
<?php for($i=0;$i<10;$i++){ ?>
<tr><td><?php echo $i;?></td></tr>
<?php }?>
為了解決在html語言中出現這種大括號分開寫,不美觀的情況,可以使用標籤語法替代
標籤語法:在大括號開始“{”的時候使用冒號“:”替代,在大括號結束的地方使用end+標籤+分號“;”
If(){
}
標籤語法
If() :
Endif;
For循環
For():
Endfor;
While循環
While():
Endwhile;
Foreach循環
Foreach():
Endforeach;
使用見代碼demo06.php
3.函數
什麼是函數?某一段常用的代碼塊的集合,在使用的時候只需要去調用這個代碼塊的“入口”,函數名即可。
為什麼使用函數?
代碼的重複利用
模塊化編程
函數分為兩種:系統函數和自定義函數
系統函數:系統為開發人員定義的函數,只需要開發人員調用即可。
自定義函數:開發人員自己定義函數,調用前需要先定義函數。
自定義函數
語法:
function 函數名(參數列表){
函數體;
Return返回值
}
自定義函數的幾個要素:函數名,函數體,返回值
如何調用函數?
跟調用系統函數一樣
語法:函數名(參數列表);
函數到底是如何被執行的?
函數的調用與函數的定義順序沒有關係,可以在定義函數之前調用函數,前提是彼此都在同一個腳本。
原因何在?
函數的參數:形式參數和實際參數
形式參數:定義函數的時候所使用的參數就稱之為形式參數,形式參數沒有實際值
實際參數:在調用函數的時候傳遞給形式參數的參數叫做實際參數
代碼
函數參數的傳遞
值傳遞:拷貝複製,重新開闢內存空間
引用傳遞:直接傳遞地址,指向同一個內存空間
函數默認使用的都是值傳遞,把實際傳入的參數的值複製並賦值給形式參數。
但是也可以改變函數的參數方式變成引用傳遞。
語法
在定義函數的時候,將形式參數添加一個&符號
Function test(&$name){
//在這裡對$name進行操作,也就是對外部傳入的變量進行操作
}
調用:與普通調用一樣
引用傳值原理
代碼
作用域
什麼是作用域?一個變量能夠被識別的範圍。
PHP中有兩個作用域:全局作用域,局部作用域
Js中也有兩個作用域:全局作用域,局部作用域
如何在函數內部使用全局變量呢?
PHP提供了一種機制去在函數內部調用全局變量
$GLOBALS[‘全局變量名’]
原理:
$GLOBALS會在用戶定義全局變量的時候,將變量名和值保存到$GLOBALS數組中,其中變量名對應鍵名(數組下標),值對應數組的值。
又因為$GLOBALS是超全局變量,所以可以在任何地方使用。
$GLOBALS保存的全局變量的引用,$GLOBALS[‘變量名’] === 變量名
Global 全局變量名
在函數內部建立一個全局變量
global原理