注釋:PHP 語句以分號結尾(;)。PHP 代碼塊的關閉標簽也會自動表明分號(因此在 PHP 代碼塊的最后一行不必使用分號)。
PHP 大小寫敏感在 PHP 中,所有用戶定義的函數、類和關鍵詞(例如 if、else、echo 等等)都對大小寫不敏感。
不過在 PHP 中,所有變量都對大小寫敏感。
注釋:PHP 變量名稱對大小寫敏感!
PHP 變量作用域在 PHP 中,可以在腳本的任意位置對變量進行聲明。
變量的作用域指的是變量能夠被引用/使用的那部分腳本。
PHP 有三種不同的變量作用域:
local(局部)global(全局)html' target='_blank'>static(靜態)Local 和 Global 作用域函數之外聲明的變量擁有 Global 作用域,只能在函數以外進行訪問。
函數內部聲明的變量擁有 LOCAL 作用域,只能在函數內部進行訪問。
注釋:您可以在不同的函數中創建名稱相同的局部變量,因為局部變量只能被在其中創建它的函數識別。PHP static 關鍵詞通常,當函數完成/執行后,會刪除所有變量。不過,有時我需要不刪除某個局部變量。實現這一點需要更進一步的工作。
要完成這一點,請在您首次聲明變量時使用 static 關鍵詞:
實例<?phpfunction myTest() { static $x=0; echo $x; $x++;}myTest();myTest();myTest();?>
運行實例
然后,每當函數被調用時,這個變量所存儲的信息都是函數最后一次被調用時所包含的信息。
注釋:該變量仍然是函數的局部變量。
PHP 5 echo 和 print 語句在 PHP 中,有兩種基本的輸出方法:echo 和 print。echo 和 print 之間的差異:
echo - 能夠輸出一個以上的字符串print - 只能輸出一個字符串,并始終返回 1提示:echo 比 print 稍快,因為它不返回任何值。
PHP echo 語句echo 是一個語言結構,有無括號均可使用:echo 或 echo()。
PHP echo 語句echo 是一個語言結構,有無括號均可使用:echo 或 echo()。
顯示字符串下面的例子展示如何用 echo 命令來顯示不同的字符串(同時請注意字符串中能包含 HTML 標記):
<?phpecho "<h4>PHP is fun!</h4>";echo "Hello world!<br>";echo "I'm about to learn PHP!<br>";echo "This", " string", " was", " made", " with multiple parameters.";?>PHP print 語句
print 也是語言結構,有無括號均可使用:print 或 print()。
顯示字符串下面的例子展示如何用 print 命令來顯示不同的字符串(同時請注意字符串中能包含 HTML 標記):
<?phpprint "<h4>PHP is fun!</h4>";print "Hello world!<br>";print "I'm about to learn PHP!";?>PHP 數據類型
字符串、整數、浮點數、邏輯、數組、對象、NULL。
PHP 字符串字符串是字符序列,比如 "Hello world!"。
字符串可以是引號內的任何文本。您可以使用單引號或雙引號:
PHP 整數整數是沒有小數的數字。
整數規則:
整數必須有至少一個數字(0-9)整數不能包含逗號或空格整數不能有小數點整數正負均可可以用三種格式規定整數:十進制、十六進制(前綴是 0x)或八進制(前綴是 0)PHP 數組數組在一個變量中存儲多個值。
PHP var_dump() 會返回變量的數據類型和值:
PHP 對象對象是存儲數據和有關如何處理數據的信息的數據類型。
在 PHP 中,必須明確地聲明對象。
??????
PHP 對象
對象是存儲數據和有關如何處理數據的信息的數據類型。
在 PHP 中,必須明確地聲明對象。
首先我們必須聲明對象的類。對此,我們使用 class 關鍵詞。類是包含屬性和方法的結構。
然后我們在對象類中定義數據類型,然后在該類的實例中使用此數據類型:
實例<?phpclass Car{ var $color; function Car($color="green") { $this->color = $color; } function what_color() { return $this->color; }}?>PHP NULL 值
特殊的 NULL 值表示變量無值。NULL 是數據類型 NULL 唯一可能的值。
NULL 值標示變量是否為空。也用于區分空字符串與空值數據庫。
可以通過把值設置為 NULL,將變量清空。
PHP strlen() 函數strlen() 函數返回字符串的長度,以字符計。
提示:strlen() 常用于循環和其他函數,在確定字符串何時結束很重要時。(例如,在循環中,我們也許需要在字符串的最后一個字符之后停止循環)。PHP String 函數
實例查找 "php" 在字符串中第一次出現的位置:
<?phpecho strpos("You love php, I love php too!","php");?>
運行實例
定義和用法strpos() 函數查找字符串在另一字符串中第一次出現的位置。
注釋:strpos() 函數對大小寫敏感。
注釋:該函數是二進制安全的。
相關函數:stripos() - 查找字符串在另一字符串中第一次出現的位置(不區分大小寫)strripos() - 查找字符串在另一字符串中最后一次出現的位置(不區分大小寫)strrpos() - 查找字符串在另一字符串中最后一次出現的位置(區分大小寫)PHP 常量常量類似變量,但是常量一旦被定義就無法更改或撤銷定義。
常量是單個值的標識符(名稱)。在腳本中無法改變該值。
有效的常量名以字符或下劃線開頭(常量名稱前面沒有 $ 符號)。
注釋:與變量不同,常量貫穿整個腳本是自動全局的。
設置 PHP 常量如需設置常量,請使用 define() 函數 - 它使用三個參數:
首個參數定義常量的名稱第二個參數定義常量的值可選的第三個參數規定常量名是否對大小寫敏感。默認是 false。PHP 算數運算符運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
運算符 | 名稱 | 描述 |
---|---|---|
PHP 比較運算符用于比較兩個值(數字或字符串):
運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
PHP 數組運算符用于比較數組:
運算符 | 名稱 | 例子 | 結果 |
---|---|---|---|
條件語句用于基于不同條件執行不同的動作
PHP 條件語句在您編寫代碼時,經常會希望為不同的決定執行不同的動作。您可以在代碼中使用條件語句來實現這一點。
在 PHP 中,我們可以使用以下條件語句:
if 語句 - 如果指定條件為真,則執行代碼if...else 語句 - 如果條件為 true,則執行代碼;如果條件為 false,則執行另一端代碼if...elseif....else 語句 - 選擇若干段代碼塊之一來執行switch 語句 - 語句多個代碼塊之一來執行switch 語句用于基于不同條件執行不同動作。
Switch 語句如果您希望有選擇地執行若干代碼塊之一,請使用 Switch 語句。
使用 Switch 語句可以避免冗長的 if..elseif..else 代碼塊。
工作原理:
對表達式(通常是變量)進行一次計算把表達式的值與結構中 case 的值進行比較如果存在匹配,則執行與 case 關聯的代碼代碼執行后,break 語句阻止代碼跳入下一個 case 中繼續執行如果沒有 case 為真,則使用 default 語句PHP while 循環PHP while 循環在指定條件為 true 時執行代碼塊。
PHP 循環在您編寫代碼時,經常需要反復運行同一代碼塊。我們可以使用循環來執行這樣的任務,而不是在腳本中添加若干幾乎相等的代碼行。
在 PHP 中,我們有以下循環語句:
while - 只要指定條件為真,則循環代碼塊do...while - 先執行一次代碼塊,然后只要指定條件為真則重復循環for - 循環代碼塊指定次數foreach - 遍歷數組中的每個元素并循環代碼塊請注意,do while 循環只在執行循環內的語句之后才對條件進行測試。這意味著 do while 循環至少會執行一次語句,即使條件測試在第一次就失敗了。
下面的例子把 $x 設置為 6,然后運行循環,隨后對條件進行檢查:
實例<?php $x=6;do { echo "這個數字是:$x <br>"; $x++;} while ($x<=5);?>
PHP for 循環執行代碼塊指定的次數。
PHP for 循環如果您已經提前確定腳本運行的次數,可以使用 for 循環。
PHP foreach 循環foreach 循環只適用于數組,并用于遍歷數組中的每個鍵/值對。
語法foreach ($array as $value) { code to be executed;}
每進行一次循環迭代,當前數組元素的值就會被賦值給 $value 變量,并且數組指針會逐一地移動,直到到達最后一個數組元素。
PHP 函數PHP 的真正力量來自它的函數:它擁有超過 1000 個內建的函數。
PHP 用戶定義函數除了內建的 PHP 函數,我們可以創建我們自己的函數。
函數是可以在程序中重復使用的語句塊。
頁面加載時函數不會立即執行。
函數只有在被調用時才會執行。
在 PHP 創建用戶定義函數用戶定義的函數聲明以關單 "function" 開頭:
語法function functionName() { 被執行的代碼;}
注釋:函數名能夠以字母或下劃線開頭(而非數字)。
注釋:函數名對大小寫不敏感。
提示:函數名應該能夠反映函數所執行的任務。
在下面的例子中,我們創建名為 "writeMsg()" 的函數。打開的花括號({)指示函數代碼的開始,而關閉的花括號(})指示函數的結束。
<?phpfunction writeMsg() { echo "Hello world!";}writeMsg(); // 調用函數?>PHP 函數參數
可以通過參數向函數傳遞信息。參數類似變量。
參數被定義在函數名之后,括號內部。您可以添加任意多參數,只要用逗號隔開即可。
下面的例子中的函數有一個參數($fname)。當調用 familyName() 函數時,我們同時要傳遞一個名字(例如 Bill),這樣會輸出不同的名字,但是姓氏相同:
實例<?phpfunction familyName($fname) { echo "$fname Zhang.<br>";}familyName("Li");familyName("Hong");familyName("Tao");familyName("Xiao Mei");familyName("Jian");?>PHP 默認參數值
下面的例子展示了如何使用默認參數。如果我們調用沒有參數的 setHeight() 函數,它的參數會取默認值:
實例<?phpfunction setHeight($minheight=50) { echo "The height is : $minheight <br>";}setHeight(350);setHeight(); // 將使用默認值 50setHeight(135);setHeight(80);?>PHP 函數 - 返回值
如需使函數返回值,請使用 return 語句:
實例<?phpfunction sum($x,$y) { $z=$x+$y; return $z;}echo "5 + 10 = " . sum(5,10) . "<br>";echo "7 + 13 = " . sum(7,13) . "<br>";echo "2 + 4 = " . sum(2,4);?>上述示例輸出結果:
5 + 10 = 15
7 + 13 = 20
2 + 4 = 6
數組能夠在單獨的變量名中存儲一個或多個值。
數組能夠在單一變量名中存儲許多值,并且您能夠通過引用下標號來訪問某個值。
在 PHP 中,有三種數組類型:
索引數組 - 帶有數字索引的數組關聯數組 - 帶有指定鍵的數組多維數組 - 包含一個或多個數組的數組下面的例子創建名為 $cars 的索引數組,為其分配三個元素,然后輸出包含數組值的一段文本:
實例<?php$cars=array("Volvo","BMW","SAAB");echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";?>
運行實例
獲得數組的長度 - count() 函數count() 函數用于返回數組的長度(元素數):
實例<?php$cars=array("Volvo","BMW","SAAB");echo count($cars);?>
運行實例
遍歷索引數組如需遍歷并輸出索引數組的所有值,您可以使用 for 循環,就像這樣:
實例<?php$cars=array("Volvo","BMW","SAAB");$arrlength=count($cars);for($x=0;$x<$arrlength;$x++) { echo $cars[$x]; echo "<br>";}?>
運行實例
PHP 關聯數組關聯數組是使用您分配給數組的指定鍵的數組。
有兩種創建關聯數組的方法:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
或者:
$age['Peter']="35";$age['Ben']="37";$age['Joe']="43";
隨后可以在腳本中使用指定鍵:
實例<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");echo "Peter is " . $age['Peter'] . " years old.";?>
運行實例
遍歷關聯數組如需遍歷并輸出關聯數組的所有值,您可以使用 foreach 循環,就像這樣:
實例<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>";}?>
運行實例
數組中的元素能夠以字母或數字順序進行升序或降序排序。
PHP - 數組的排序函數在本節中,我們將學習如下 PHP 數組排序函數:
sort() - 以升序對數組排序rsort() - 以降序對數組排序asort() - 根據值,以升序對關聯數組進行排序ksort() - 根據鍵,以升序對關聯數組進行排序arsort() - 根據值,以降序對關聯數組進行排序krsort() - 根據鍵,以降序對關聯數組進行排序根據鍵對數組進行降序排序 - krsort()<!DOCTYPE html><html><body><?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");krsort($age);foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; }?></body></html>PHP 全局變量 - 超全局變量
PHP 中的許多預定義變量都是“超全局的”,這意味著它們在一個腳本的全部作用域中都可用。在函數或方法中無需執行 global $variable; 就可以訪問它們。
這些超全局變量是:
$GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION下表列出了您能夠在 $_SERVER 中訪問的最重要的元素:
元素/代碼 | 描述 |
---|---|
PHP 超全局變量 $_GET 和 $_POST 用于收集表單數據(form-data)。
注意:在處理 PHP 表單時請關注安全!
GET 和 POST 都創建數組(例如,array( key => value, key2 => value2, key3 => value3, ...))。此數組包含鍵/值對,其中的鍵是表單控件的名稱,而值是來自用戶的輸入數據。
GET 和 POST 被視作 $_GET 和 $_POST。它們是超全局變量,這意味著對它們的訪問無需考慮作用域 - 無需任何特殊代碼,您能夠從任何函數、類或文件訪問它們。
$_GET 是通過 URL 參數傳遞到當前腳本的變量數組。
$_POST 是通過 HTTP POST 傳遞到當前腳本的變量數組。
何時使用 GET?通過 GET 方法從表單發送的信息對任何人都是可見的(所有變量名和值都顯示在 URL 中)。GET 對所發送信息的數量也有限制。限制在大于 2000 個字符。不過,由于變量顯示在 URL 中,把頁面添加到書簽中也更為方便。
GET 可用于發送非敏感的數據。
注釋:絕不能使用 GET 來發送密碼或其他敏感信息!
何時使用 POST?通過 POST 方法從表單發送的信息對其他人是不可見的(所有名稱/值會被嵌入 HTTP 請求的主體中),并且對所發送信息的數量也無限制。
此外 POST 支持高階功能,比如在向服務器上傳文件時進行 multi-part 二進制輸入。
不過,由于變量未顯示在 URL 中,也就無法將頁面添加到書簽。
提示:開發者偏愛 POST 來發送表單數據。
如何使用 PHP 來驗證表單數據。
PHP 表單驗證提示:在處理 PHP 表單時請重視安全性!
什么是 $_SERVER["PHP_SELF"] 變量?$_SERVER["PHP_SELF"] 是一種超全局變量,它返回當前執行腳本的文件名。
因此,$_SERVER["PHP_SELF"] 將表單數據發送到頁面本身,而不是跳轉到另一張頁面。這樣,用戶就能夠在表單頁面獲得錯誤提示信息。
什么是 htmlspecialchars() 函數?htmlspecialchars() 函數把特殊字符轉換為 HTML 實體。這意味著 < 和 > 之類的 HTML 字符會被替換為 < 和 > 。這樣可防止攻擊者通過在表單中注入 HTML 或 JavaScript 代碼(跨站點腳本攻擊)對代碼進行利用。
關于 PHP 表單安全性的重要提示$_SERVER["PHP_SELF"] 變量能夠被黑客利用!
如果您的頁面使用了 PHP_SELF,用戶能夠輸入下劃線然后執行跨站點腳本(XSS)。
提示:跨站點腳本(Cross-site scripting,XSS)是一種計算機安全漏洞類型,常見于 Web 應用程序。XSS 能夠使攻擊者向其他用戶瀏覽的網頁中輸入客戶端腳本。
假設我們的一張名為 "test_form.php" 的頁面中有如下表單:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
現在,如果用戶進入的是地址欄中正常的 URL:"http://www.example.com/test_form.php",上面的代碼會轉換為:
<form method="post" action="test_form.php">
到目前,一切正常。
不過,如果用戶在地址欄中鍵入了如下 URL:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
在這種情況下,上面的代碼會轉換為:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
這段代碼加入了一段腳本和一個提示命令。并且當此頁面加載后,就會執行 JavaScript 代碼(用戶會看到一個提示框)。這僅僅是一個關于 PHP_SELF 變量如何被利用的簡單無害案例。
您應該意識到 <script> 標簽內能夠添加任何 JavaScript 代碼!黑客能夠把用戶重定向到另一臺服務器上的某個文件,該文件中的惡意代碼能夠更改全局變量或將表單提交到其他地址以保存用戶數據,等等。
如果避免 $_SERVER["PHP_SELF"] 被利用?通過使用 htmlspecialchars() 函數能夠避免 $_SERVER["PHP_SELF"] 被利用。
表單代碼是這樣的:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() 函數把特殊字符轉換為 HTML 實體。現在,如果用戶試圖利用 PHP_SELF 變量,會導致如下輸出:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
無法利用,沒有危害!
通過 PHP 驗證表單數據我們要做的第一件事是通過 PHP 的 htmlspecialchars() 函數傳遞所有變量。
在我們使用 htmlspecialchars() 函數后,如果用戶試圖在文本字段中提交以下內容:
<script>location.href('http://www.hacked.com')</script>
- 代碼不會執行,因為會被保存為轉義代碼,就像這樣:
<script>location.href('http://www.hacked.com')</script>
現在這條代碼顯示在頁面上或 e-mail 中是安全的。
在用戶提交該表單時,我們還要做兩件事:
(通過 PHP trim() 函數)去除用戶輸入數據中不必要的字符(多余的空格、制表符、換行)(通過 PHP stripslashes() 函數)刪除用戶輸入數據中的反斜杠()接下來我們創建一個檢查函數(相比一遍遍地寫代碼,這樣效率更好)。
我們把函數命名為 test_input()。
現在,我們能夠通過 test_input() 函數檢查每個 $_POST 變量,腳本是這樣的:
<!DOCTYPE HTML> <html><head></head><body> <?php// define variables and set to empty values$name = $email = $gender = $comment = $website = "";if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]);}function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data;}?><h4>PHP 驗證實例</h4><form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 姓名:<input type="text" name="name"> <br><br> 電郵:<input type="text" name="email"> <br><br> 網址:<input type="text" name="website"> <br><br> 評論:<textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性別: <input type="radio" name="gender" value="female">女性 <input type="radio" name="gender" value="male">男性 <br><br> <input type="submit" name="submit" value="提交"> </form><?phpecho "<h4>您的輸入:</h4>";echo $name;echo "<br>";echo $email;echo "<br>";echo $website;echo "<br>";echo $comment;echo "<br>";echo $gender;?></body></html>制作必填輸入字段,并創建需要時所用的錯誤消息。
<!DOCTYPE HTML> <html><head><style>.error {color: #FF0000;}</style></head><body> <?php// 定義變量并設置為空值$nameErr = $emailErr = $genderErr = $websiteErr = "";$name = $email = $gender = $comment = $website = "";if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "姓名是必填的"; } else { $name = test_input($_POST["name"]); } if (empty($_POST["email"])) { $emailErr = "電郵是必填的"; } else { $email = test_input($_POST["email"]); } if (empty($_POST["website"])) { $website = ""; } else { $website = test_input($_POST["website"]); } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "性別是必選的"; } else { $gender = test_input($_POST["gender"]); }}function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data;}?><h4>PHP 驗證實例</h4><p>* 必需的字段</p><form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 姓名:<input type="text" name="name"> * <?php echo $nameErr;?> <br><br> 電郵:<input type="text" name="email"> * <?php echo $emailErr;?> <br><br> 網址:<input type="text" name="website"> <?php echo $websiteErr;?> <br><br> 評論:<textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性別: <input type="radio" name="gender" value="female">女性 <input type="radio" name="gender" value="male">男性 * <?php echo $genderErr;?> <br><br> <input type="submit" name="submit" value="提交"> </form><?phpecho "<h4>您的輸入:</h4>";echo $name;echo "<br>";echo $email;echo "<br>";echo $website;echo "<br>";echo $comment;echo "<br>";echo $gender;?></body></html>接下來是驗證輸入數據,即“Name 字段是否只包含字母和空格?”,以及“E-mail 字段是否包含有效的電子郵件地址語法?”,并且如果填寫了 Website 字段,“這個字段是否包含了有效的 URL?”。
以下代碼展示的簡單方法檢查 name 字段是否包含字母和空格。如果 name 字段無效,則存儲一條錯誤消息:
$name = test_input($_POST["name"]);if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允許字母和空格!"; }PHP - 驗證Email.
以下代碼展示的簡單方法檢查 e-mail 地址語法是否有效。如果無效則存儲一條錯誤消息:
$email = test_input($_POST["email"]);if (!preg_match("/([w-]+@[w-]+.[w-]+)/",$email)) { $emailErr = "無效的 email 格式!"; }PHP - 驗證 URL
以下代碼展示的方法檢查 URL 地址語法是否有效(這條正則表達式同時允許 URL 中的斜杠)。如果 URL 地址語法無效,則存儲一條錯誤消息:
$website = test_input($_POST["website"]);if (!preg_match("/(?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%=~_|]/i",$website)) { $websiteErr = "無效的 URL"; }
PHP—驗證Name ,E-mail,以及URL的方法同理,只是規則有些不同。
PHP—保留表單中的值。
如需在用戶點擊提交按鈕后在輸入字段中顯示值,我們在以下輸入字段的 value 屬性中增加了一小段 PHP 腳本:name、email 以及 website。在 comment 文本框字段中,我們把腳本放到了 <textarea> 與 </textarea> 之間。這些腳本輸出 $name、$email、$website 和 $comment 變量的值。
然后,我們還需要顯示選中了哪個單選按鈕。對此,我們必須操作 checked 屬性(而非單選按鈕的 value 屬性):
PHP - 完整的表單實例下面是 PHP 表單驗證實例的完整代碼:
<!DOCTYPE HTML> <html><head><style>.error {color: #FF0000;}</style></head><body> <?php// 定義變量并設置為空值$nameErr = $emailErr = $genderErr = $websiteErr = "";$name = $email = $gender = $comment = $website = "";if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "姓名是必填的"; } else { $name = test_input($_POST["name"]); // 檢查姓名是否包含字母和空白字符 if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允許字母和空格"; } } if (empty($_POST["email"])) { $emailErr = "電郵是必填的"; } else { $email = test_input($_POST["email"]); // 檢查電子郵件地址語法是否有效 if (!preg_match("/([w-]+@[w-]+.[w-]+)/",$email)) { $emailErr = "無效的 email 格式"; } } if (empty($_POST["website"])) { $website = ""; } else { $website = test_input($_POST["website"]); // 檢查 URL 地址語法是否有效(正則表達式也允許 URL 中的斜杠) if (!preg_match("/(?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%=~_|]/i",$website)) { $websiteErr = "無效的 URL"; } } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "性別是必選的"; } else { $gender = test_input($_POST["gender"]); }}function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data;}?><h4>PHP 驗證實例</h4><p>* 必需的字段</p><form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 姓名:<input type="text" name="name"> * <?php echo $nameErr;?> <br><br> 電郵:<input type="text" name="email"> * <?php echo $emailErr;?> <br><br> 網址:<input type="text" name="website"> <?php echo $websiteErr;?> <br><br> 評論:<textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性別: <input type="radio" name="gender" value="female">女性 <input type="radio" name="gender" value="male">男性 * <?php echo $genderErr;?> <br><br> <input type="submit" name="submit" value="提交"> </form><?phpecho "<h4>您的輸入:</h4>";echo $name;echo "<br>";echo $email;echo "<br>";echo $website;echo "<br>";echo $comment;echo "<br>";echo $gender;?></body></html>PHP - 多維數組
多維數組指的是包含一個或多個數組的數組。
PHP 能理解兩、三、四或五級甚至更多級的多維數組。不過,超過三級深的數組對于大多數人難于管理。
注釋:數組的維度指示您需要選擇元素的索引數。
對于二維數組,您需要兩個索引來選取元素對于三維數組,您需要三個索引來選取元素<!DOCTYPE html><html><body><?php$cars = array ( array("Volvo",33,20), array("BMW",17,15), array("Saab",5,2), array("Land Rover",15,11) ); for ($row = 0; $row < 4; $row++) { echo "<p><b>行數 $row</b></p>"; echo "<ul>"; for ($col = 0; $col < 3; $col++) { echo "<li>".$cars[$row][$col]."</li>"; } echo "</ul>";}?></body></html>PHP date() 函數用于對日期或時間進行格式化。
PHP Date() 函數把時間戳格式化為更易讀的日期和時間。
語法date(format,timestamp)
參數 | 描述 |
---|---|
date() 函數的格式參數是必需的,它們規定如何格式化日期或時間。
下面列出了一些常用于日期的字符:
d - 表示月里的某天(01-31)m - 表示月(01-12)Y - 表示年(四位數)1 - 表示周里的某天其他字符,比如 "/", "." 或 "-" 也可被插入字符中,以增加其他格式。
獲得簡單的時間下面是常用于時間的字符:
h - 帶有首位零的 12 小時小時格式i - 帶有首位零的分鐘s - 帶有首位零的秒(00 -59)a - 小寫的午前和午后(am 或 pm)通過 PHP mktime() 創建日期date() 函數中可選的時間戳參數規定時間戳。如果您未規定時間戳,將使用當前日期和時間(正如上例中那樣)。
mktime() 函數返回日期的 Unix 時間戳。Unix 時間戳包含 Unix 紀元(1970 年 1 月 1 日 00:00:00 GMT)與指定時間之間的秒數。
語法mktime(hour,minute,second,month,day,year)更多日期實例
下例輸出下周六的日期:
實例<?php$startdate = strtotime("Saturday");$enddate = strtotime("+6 weeks",$startdate);while ($startdate < $enddate) { echo date("M d", $startdate),"<br>"; $startdate = strtotime("+1 week", $startdate);}?>
下例輸出七月四日之前的天數:
實例<?php$d1=strtotime("December 31");$d2=ceil(($d1-time())/60/60/24);echo "距離十二月三十一日還有:" . $d2 ." 天。";?>
ceil() 函數向上舍入為最接近的整數。
語法ceil(x)
參數 | 描述 |
---|---|
返回不小于 x 的下一個整數,x 如果有小數部分則進一位。ceil() 返回的類型仍然是 float,因為 float 值的范圍通常比 integer 要大。
服務器端包含 (SSI) 用于創建可在多個頁面重復使用的函數、頁眉、頁腳或元素。
include (或 require)語句會獲取指定文件中存在的所有文本/代碼/標記,并復制到使用 include 語句的文件中。
包含文件很有用,如果您需要在網站的多張頁面上引用相同的 PHP、HTML 或文本的話。
PHP include 和 require 語句通過 include 或 require 語句,可以將 PHP 文件的內容插入另一個 PHP 文件(在服務器執行它之前)。
include 和 require 語句是相同的,除了錯誤處理方面:
require 會生成致命錯誤(E_COMPILE_ERROR)并停止腳本include 只生成警告(E_WARNING),并且腳本會繼續因此,如果您希望即使包含文件已丟失,仍然繼續執行,并向用戶輸出結果,那么請使用 include。否則,在框架、CMS 或者復雜的 PHP 應用程序編程中,請始終使用 require 向執行流引用關鍵文件。這有助于提高應用程序的安全性和完整性,在某個關鍵文件意外丟失的情況下。
包含文件省去了大量的工作。這意味著您可以為所有頁面創建標準頁頭、頁腳或者菜單文件。然后,在頁頭需要更新時,您只需更新這個頁頭包含文件即可。
注釋:
請在此時使用 require:當文件被應用程序請求時。
請在此時使用 include:當文件不是必需的,且應用程序在文件未找到時應該繼續運行時。
PHP 操作文件PHP 擁有的多種函數可供創建、讀取、上傳以及編輯文件。
注意:請謹慎操作文件!
當您操作文件時必須非常小心。如果您操作失誤,可能會造成非常嚴重的破壞。常見的錯誤是:
編輯錯誤的文件被垃圾數據填滿硬盤意外刪除文件內容在本節中,我們向您講解如何在服務器上打開、讀取以及關閉文件。
PHP Open File - fopen()PHP Filesystem 簡介Filesystem 函數允許您訪問和操作文件系統。
PHP 讀取單行文件 - fgets()fgets() 函數用于從文件讀取單行。
下例輸出 "webdictionary.txt" 文件的首行:
實例<?php$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");echo fgets($myfile);fclose($myfile);?>
運行實例
注釋:調用 fgets() 函數之后,文件指針會移動到下一行。
PHP 檢查 End-Of-File - feof()feof() 函數檢查是否已到達 "end-of-file" (EOF)。
feof() 對于遍歷未知長度的數據很有用。
下例逐行讀取 "webdictionary.txt" 文件,直到 end-of-file:
實例<?php$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");// 輸出單行直到 end-of-filewhile(!feof($myfile)) { echo fgets($myfile) . "<br>";}fclose($myfile);?>
運行實例
PHP 讀取單字符 - fgetc()fgetc() 函數用于從文件中讀取單個字符。
下例逐字符讀取 "webdictionary.txt" 文件,直到 end-of-file:
實例<?php$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");// 輸出單字符直到 end-of-filewhile(!feof($myfile)) { echo fgetc($myfile);}fclose($myfile);?>
運行實例
注釋:在調用 fgetc() 函數之后,文件指針會移動到下一個字符。
Filesystem 函數是 PHP 核心的組成部分。無需安裝即可使用這些函數。
Runtime 配置文件系統函數的行為受到 php.ini 中設置的影響。
文件系統配置選項:
名稱 | 默認 | 描述 | 可改變 |
---|---|---|---|
當在 Unix 平臺上規定路徑時,正斜杠 (/) 用作目錄分隔符。而在 Windows 平臺上,正斜杠 (/) 和反斜杠 () 均可使用。
PHP 文件上傳通過 PHP,可以把文件上傳到服務器。
創建一個文件上傳表單<html><body><form action="upload_file.php" method="post"enctype="multipart/form-data"><label for="file">Filename:</label><input type="file" name="file" id="file" /> <br /><input type="submit" name="submit" value="Submit" /></form></body></html>
form> 標簽的 enctype 屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進制數據時,比如文件內容,請使用 "multipart/form-data"。
<input> 標簽的 type="file" 屬性規定了應該把輸入作為文件來處理。舉例來說,當在瀏覽器中預覽時,會看到輸入框旁邊有一個瀏覽按鈕。
注釋:允許用戶上傳文件是一個巨大的安全風險。請僅僅允許可信的用戶執行文件上傳操作。
第一個參數是表單的 input name,第二個下標可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣:
$_FILES["file"]["name"] - 被上傳文件的名稱$_FILES["file"]["type"] - 被上傳文件的類型$_FILES["file"]["size"] - 被上傳文件的大小,以字節計$_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱$_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼 注釋:對于 IE,識別 jpg 文件的類型必須是 pjpeg,對于 FireFox,必須是 jpeg。注釋:這個例子把文件保存到了名為 "upload" 的新文件夾。
<?phpif ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/pjpeg"))&& ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } }else { echo "Invalid file"; }?>PHP Cookies什么是 Cookie?
cookie 常用于識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機通過瀏覽器請求頁面時,它同時會發送 cookie。通過 PHP,您能夠創建并取回 cookie 的值。
setcookie() 函數用于設置 cookie。
注釋:setcookie() 函數必須位于 <html> 標簽之前。
語法setcookie(name, value, expire, path, domain);PHP Sessions
PHP session 變量用于存儲有關用戶會話的信息,或更改用戶會話的設置。Session 變量保存的信息是單一用戶的,并且可供應用程序中的所有頁面使用。
Session 的工作機制是:為每個訪問者創建一個唯一的 id (UID),并基于這個 UID 來存儲變量。UID 存儲在 cookie 中,亦或通過 URL 進行傳導。
PHP 發送電子郵件PHP 允許您從腳本直接發送電子郵件。
PHP mail() 函數PHP mail() 函數用于從腳本中發送電子郵件。
語法mail(to,subject,message,headers,parameters)
參數 | 描述 |
---|---|
注釋:PHP 需要一個已安裝且正在運行的郵件系統,以便使郵件函數可用。所用的程序通過在 php.ini 文件中的配置設置進行定義。請在我們的PHP Mail 參考手冊閱讀更多內容。
<strong>PHP測試成功的郵件發送案例????????需要測試</strong>mail()函數的作用:連接到郵件服務器,利用smtp協議,與該服務器交互并投郵件。注意:1、mail函數不支持esmtp協議,---即,只能直投,不能登陸2、由上條,我們只能直投至最終的收件服務器地址.而該地址,又是在PHP.ini中指定的,所以我們想用mail()函數往 aseoev@163.com發信的話,我們要---1)查詢163郵件服務器的地址2)把該地址寫到php.ini里去php實例代碼如下:?123 SMTP = 163mx02.mxmail.netease.com sendmail_from = wusong@192.168.1.100 var_dump(mail('12345678@qq.com','from php mail function','very intresting'));但是使用php自帶的mail函數發送郵件我們需要在linux中安裝一個sendmail組件才可以否則無法使用。如果你沒有這個sendmail組件我們可以使用phpmailer函數來操作,例子代碼如下:?123456789101112131415161718192021222324 <?php require('./PHPMailer/class.phpmailer.php'); $phpmailer = new PHPMailer(); $phpmailer->IsSMTP(); $phpmailer->Host = 'smtp.163.com'; $phpmailer->SMTPAuth = true; $phpmailer->Username = ''; $phpmailer->Password = ''; $phpmailer->CharSet = 'utf-8'; $phpmailer->From = ''; $phpmailer->FromName = ''; $phpmailer->Subject = ''; $phpmailer->Body = ''; $phpmailer->AddAddress('never_kiss@163.com','Aseoe'); echo $phpmailer->send()?'發送成功':'發送失敗'; ?> 上面不帶內容,面看個帶內容的,代碼如下:?1234567891011121314151617181920212223242526272829303132333435363738 <?php /** 用PHPMailer類來發信 步驟: 0: 引入 1: 實例化 2: 配置屬性 3: 調用發送 **/require('./PHPMailer/class.phpmailer.php'); $phpmailer = new PHPMailer(); /* 設置phpmailer發信用的方式 可用用win下mail()函數來發 可以用linux下sendmail,qmail組件來發 可以利用smtp協議登陸到某個賬戶上,來發 */$phpmailer->IsSMTP(); // 用smtp協議來發 $phpmailer->Host = 'smtp.163.com'; $phpmailer->SMTPAuth = true; $phpmailer->Username = ''; //發送郵箱的賬號(用163郵箱發信的賬號) $phpmailer->Password = ''; //發送郵箱的密碼 // 可以發信了 $phpmailer->CharSet='utf-8'; $phpmailer->From = 'never_4ill@163.com'; $phpmailer->FromName = 'neverkill'; $phpmailer->Subject = 'Superstart Aseoe'; $phpmailer->Body = '腳本之家(http://www.jb51.net 專注前端開發與編程設計.'; //設置收信人 $phpmailer->AddAddress('never_4ill@163.com','neverkill'); // 添加一個抄送 $phpmailer->AddCC('1234567','Aseoe'); // 發信 echo $phpmailer->send()?'ok':'fail'; 補充一個使用上面例子的方法:直接將phpmailer壓縮包解壓放到根目錄即可運行,直接把文件放到本地wamp 根目錄,運行02.php 郵件即可發出(前提php文件可執行)-(不行的話 在根目錄建一個文件夾 重復操作一次)http://localhost/02.php。PHP 防止 E-mail 注入模板代碼
<html><body><?phpfunction spamcheck($field) { //filter_var() sanitizes the e-mail //address using FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() validates the e-mail //address using FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } }if (isset($_REQUEST['email'])) {//if "email" is filled out, proceed //check if the email address is invalid $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Invalid input"; } else {//send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } }else {//if "email" is not filled out, display the form echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; }?></body></html>
在上面的代碼中,我們使用了 PHP 過濾器來對輸入進行驗證:
FILTER_SANITIZE_EMAIL 從字符串中刪除電子郵件的非法字符FILTER_VALIDATE_EMAIL 驗證電子郵件地址PHP 錯誤處理在 PHP 中,默認的錯誤處理很簡單。一條消息會被發送到瀏覽器,這條消息帶有文件名、行號以及一條描述錯誤的消息。
在創建腳本和 web 應用程序時,錯誤處理是一個重要的部分。如果您的代碼缺少錯誤檢測編碼,那么程序看上去很不專業,也為安全風險敞開了大門。
本教程介紹了 PHP 中一些最為重要的錯誤檢測方法。
我們將為您講解不同的錯誤處理方法:
簡單的 "die()" 語句 自定義錯誤和錯誤觸發器錯誤報告第一個例子展示了一個打開文本文件的簡單腳本:
<?php$file=fopen("welcome.txt","r");?>
如果文件不存在,您會獲得類似這樣的錯誤:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:webfolder est.php on line 2
為了避免用戶獲得類似上面的錯誤消息,我們在訪問文件之前檢測該文件是否存在:
<?phpif(!file_exists("welcome.txt")) { die("File not found"); }else { $file=fopen("welcome.txt","r"); }?>
現在,假如文件不存在,您會得到類似這樣的錯誤消息:
File not found
比起之前的代碼,上面的代碼更有效,這是由于它采用了一個簡單的錯誤處理機制在錯誤之后終止了腳本。
不過,簡單地終止腳本并不總是恰當的方式。讓我們研究一下用于處理錯誤的備選的 PHP 函數。
創建自定義錯誤處理器創建一個自定義的錯誤處理器非常簡單。我們很簡單地創建了一個專用函數,可以在 PHP 中發生錯誤時調用該函數。
該函數必須有能力處理至少兩個參數 (error level 和 error message),但是可以接受最多五個參數(可選的:file, line-number 以及 error context):
語法error_function(error_level,error_message,error_file,error_line,error_context)
參數 | 描述 |
---|---|
這些錯誤報告級別是錯誤處理程序旨在處理的錯誤的不同的類型:
值 | 常量 | 描述 |
---|---|---|
現在,讓我們創建一個處理錯誤的函數:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); }
上面的代碼是一個簡單的錯誤處理函數。當它被觸發時,它會取得錯誤級別和錯誤消息。然后它會輸出錯誤級別和消息,并終止腳本。
現在,我們已經創建了一個錯誤處理函數,我們需要確定在何時觸發該函數。
Set Error HandlerPHP 的默認錯誤處理程序是內建的錯誤處理程序。我們打算把上面的函數改造為腳本運行期間的默認錯誤處理程序。
可以修改錯誤處理程序,使其僅應用到某些錯誤,這樣腳本就可以不同的方式來處理不同的錯誤。不過,在本例中,我們打算針對所有錯誤來使用我們的自定義錯誤處理程序:
set_error_handler("customError");
由于我們希望我們的自定義函數來處理所有錯誤,set_error_handler() 僅需要一個參數,可以添加第二個參數來規定錯誤級別。
實例通過嘗試輸出不存在的變量,來測試這個錯誤處理程序:
<?php//error handler functionfunction customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; }//set error handlerset_error_handler("customError");//trigger errorecho($test);?>
以上代碼的輸出應該類似這樣:
Error: [8] Undefined variable: test觸發錯誤
在腳本中用戶輸入數據的位置,當用戶的輸入無效時觸發錯誤的很有用的。在 PHP 中,這個任務由 trigger_error() 完成。
例子在本例中,如果 "test" 變量大于 "1",就會發生錯誤:
<?php$test=2;if ($test>1){trigger_error("Value must be 1 or below");}?>
以上代碼的輸出應該類似這樣:
Notice: Value must be 1 or belowin C:webfolder est.php on line 6
您可以在腳本中任何位置觸發錯誤,通過添加的第二個參數,您能夠規定所觸發的錯誤級別。
可能的錯誤類型:E_USER_ERROR - 致命的用戶生成的 run-time 錯誤。錯誤無法恢復。腳本執行被中斷。E_USER_WARNING - 非致命的用戶生成的 run-time 警告。腳本執行不被中斷。E_USER_NOTICE - 默認。用戶生成的 run-time 通知。腳本發現了可能的錯誤,也有可能在腳本運行正常時發生。例子在本例中,如果 "test" 變量大于 "1",則發生 E_USER_WARNING 錯誤。如果發生了 E_USER_WARNING,我們將使用我們的自定義錯誤處理程序并結束腳本:
<?php//error handler functionfunction customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); }//set error handlerset_error_handler("customError",E_USER_WARNING);//trigger error$test=2;if ($test>1) { trigger_error("Value must be 1 or below",E_USER_WARNING); }?>
以上代碼的輸出應該類似這樣:
Error: [512] Value must be 1 or belowEnding Script
現在,我們已經學習了如何創建自己的 error,以及如何觸發它們,現在我們研究一下錯誤記錄。
錯誤記錄默認地,根據在 php.ini 中的 error_log 配置,PHP 向服務器的錯誤記錄系統或文件發送錯誤記錄。通過使用 error_log() 函數,您可以向指定的文件或遠程目的地發送錯誤記錄。
通過電子郵件向您自己發送錯誤消息,是一種獲得指定錯誤的通知的好辦法。
通過 E-Mail 發送錯誤消息在下面的例子中,如果特定的錯誤發生,我們將發送帶有錯誤消息的電子郵件,并結束腳本:
<?php//error handler functionfunction customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Webmaster has been notified"; error_log("Error: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com");}//set error handlerset_error_handler("customError",E_USER_WARNING);//trigger error$test=2;if ($test>1) { trigger_error("Value must be 1 or below",E_USER_WARNING); }?>
以上代碼的輸出應該類似這樣:
Error: [512] Value must be 1 or belowWebmaster has been notified
接收自以上代碼的郵件類似這樣:
Error: [512] Value must be 1 or below
這個方法不適合所有的錯誤。常規錯誤應當通過使用默認的 PHP 記錄系統在服務器上進行記錄。
PHP 異常處理當異常被觸發時,通常會發生:
當前代碼狀態被保存代碼執行被切換到預定義的異常處理器函數根據情況,處理器也許會從保存的代碼狀態重新開始執行代碼,終止腳本執行,或從代碼中另外的位置繼續執行腳本我們將展示不同的錯誤處理方法:
異常的基本使用創建自定義的異常處理器多個異常重新拋出異常設置頂層異常處理器異常的基本使用當異常被拋出時,其后的代碼不會繼續執行,PHP 會嘗試查找匹配的 "catch" 代碼塊。
如果異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那么將發生一個嚴重的錯誤(致命錯誤),并且輸出 "Uncaught Exception" (未捕獲異常)的錯誤消息。
讓我們嘗試拋出一個異常,同時不去捕獲它:
Try, throw 和 catch要避免上面例子出現的錯誤,我們需要創建適當的代碼來處理異常。
正確的處理程序應當包括:
Try - 使用異常的函數應該位于 "try" 代碼塊內。如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,會拋出一個異常。Throw - 這里規定如何觸發異常。每一個 "throw" 必須對應至少一個 "catch"Catch - "catch" 代碼塊會捕獲異常,并創建一個包含異常信息的對象讓我們觸發一個異常:
<?php//創建可拋出一個異常的函數function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; }//在 "try" 代碼塊中觸發異常try { checkNum(2); //If the exception is thrown, this text will not be shown echo 'If you see this, the number is 1 or below'; }//捕獲異常catch(Exception $e) { echo 'Message: ' .$e->getMessage(); }?>
上面代碼將獲得類似這樣一個錯誤:
Message: Value must be 1 or below例子解釋:
上面的代碼拋出了一個異常,并捕獲了它:
創建 checkNum() 函數。它檢測數字是否大于 1。如果是,則拋出一個異常。在 "try" 代碼塊中調用 checkNum() 函數。checkNum() 函數中的異常被拋出"catch" 代碼塊接收到該異常,并創建一個包含異常信息的對象 ($e)。通過從這個 exception 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息不過,為了遵循“每個 throw 必須對應一個 catch”的原則,可以設置一個頂層的異常處理器來處理漏掉的錯誤。
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答