• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. php高級(jí)教程

        時(shí)間:2024-10-06 23:43:08 PHP 我要投稿
        • 相關(guān)推薦

        php高級(jí)教程

          導(dǎo)語(yǔ):php是it行業(yè)語(yǔ)言,也是一門(mén)較熱的網(wǎng)絡(luò)技術(shù),下面就由小編為大家介紹一下php高級(jí)教程,歡迎大家閱讀!

          一、PHP- 多維數(shù)組:

          $cars = array(

          array("huawei","12","11"),

          array("meizu","23","12"),

          array("iphone","12","4")

          );

          $title = array("手機(jī)總共有:","個(gè),已經(jīng)賣(mài)出去了","個(gè)!");

          for($i=0;$i{ for($j=0;$j { echo $cars[$i][$j]; echo $title[$j]; } echo " ";}?>

          輸出:

          huawei手機(jī)總共有:12個(gè),已經(jīng)賣(mài)出去了11個(gè)!

          meizu手機(jī)總共有:23個(gè),已經(jīng)賣(mài)出去了12個(gè)!

          iphone手機(jī)總共有:12個(gè),已經(jīng)賣(mài)出去了4個(gè)!

          二、PHP 日期和時(shí)間

          date() 函數(shù)的格式參數(shù)是必需的,它們規(guī)定如何格式化日期或時(shí)間。

          下面列出了一些常用于日期的字符:

          ·d - 表示月里的某天(01-31) D-表示當(dāng)前這天的英文星期簡(jiǎn)寫(xiě)

          ·m - 表示月(01-12) M-表示當(dāng)前月的英文縮寫(xiě)

          ·Y - 表示年(四位數(shù)) y-表示年(后兩位數(shù))

          ·1 - 表示周里的某天 L-返回0

          其他字符,比如 "/","." 或 "-" 也可被 插入字符中,以增加其他格式。

          echo"今天是 " . date("YYYY/m/d") ." "; //2017201720172017/06/26 由此可見(jiàn)不能用js中yyyy-mm-dd的形式

          echo"今天是 " . date("Y.m.d") . " "; //2017.06.26

          echo"今天是 " . date("Y-M-D") . " "; //17-Jun-Mon

          echo"今天是 " . date("l") . " "; //Monday 星期全稱

          echo"今天是 " . date("L") . " "; //0

          ?>

          獲得簡(jiǎn)單的時(shí)間

          下面是常用于時(shí)間的字符:

          date_default_timezone_set("Asia/Shanghai"); //設(shè)置時(shí)區(qū)

          echo date_default_timezone_get(oid);//獲取當(dāng)前時(shí)區(qū)

          ·h - 帶有首位零的 12 小時(shí)小時(shí)格式 H-24小時(shí)格式

          ·i - 帶有首位零的分鐘 I-0

          ·s - 帶有首位零的秒(00 -59) S-返回th我也不知道是什么鬼

          ·a - 小寫(xiě)的午前和午后(am 或 pm) A-返回大寫(xiě)格式:AM或PM

          echo"現(xiàn)在是 " . date("h:i:sa") . " "; //現(xiàn)在是 02:15:44pm

          echo"現(xiàn)在是 " . date("H:I:SA") . " "; //現(xiàn)在是 14:0:thPM

          通過(guò) PHP mktime() 創(chuàng)建日期

          date() 函數(shù)中可選的時(shí)間戳參數(shù)規(guī)定時(shí)間戳。如果您未規(guī)定時(shí)間戳,將使用當(dāng)前日期和時(shí)間

          語(yǔ)法

          mktime(hour,minute,second,month,day,year)

          $d=mktime(9,12, 31, 6, 10, 215) ;

          echo"創(chuàng)建日期是 " . date("Y-m-d h:i:sa", $d) ." "; //在date方法里面?zhèn)鲄t取的是參數(shù)中的時(shí)間,如果不傳的話則取的是當(dāng)前時(shí)間

          通過(guò) PHP strtotime() 用字符串來(lái)創(chuàng)建日期

          PHP strtotime() 函數(shù)用于把人類(lèi)可讀的字符串轉(zhuǎn)換為Unix 時(shí)間。

          $d=strtotime("10:38pm April 15 2015");

          echo "創(chuàng)建日期是 " . date("Y-m-d h:i:sa", $d);

          如果輸入了它不能識(shí)別的字符串則保存為 1970-01-01 12:00:00am

          計(jì)算兩個(gè)時(shí)間段內(nèi)的時(shí)間所有的周六

          $startdate = strtotime("Saturday");

          $enddate = strtotime("+6 weeks",$startdate);

          while ($startdate < $enddate) {

          echo date("M d", $startdate)," ";

          $startdate = strtotime("+1 week", $startdate); //在$startdate基礎(chǔ)上加一個(gè)禮拜,你還可以加1天,1個(gè)月,1年

          }

          ?>

          計(jì)算距離某一天還有多長(zhǎng)時(shí)間

          $d1=strtotime("2017-7-30");

          $d2=ceil(($d1-time())/60/60/24);

          echo "距離十二月三十一日還有:" . $d2 ." 天。";

          ?>

          三、PHP Cookies

          cookie 常用于識(shí)別用戶。cookie 是服務(wù)器留在用戶計(jì)算機(jī)中的小文件。每當(dāng)相同的計(jì)算機(jī)通過(guò)瀏覽器請(qǐng)求頁(yè)面時(shí),它同時(shí)會(huì)發(fā)送 cookie。通過(guò) PHP,您能夠創(chuàng)建并取回 cookie 的值。

          創(chuàng)建cookie

          setcookie() 函數(shù)用于設(shè)置 cookie。

          注釋:setcookie() 函數(shù)必須位于

          標(biāo)簽之前。

          語(yǔ)法

          setcookie(name, value, expire, path, domain);

          在下面的例子中,我們將創(chuàng)建名為 "user" 的 cookie,把為它賦值 "Alex Porter"。我們也規(guī)定了此 cookie 在一小時(shí)后過(guò)期:

          setcookie("user", "Alex Porter", time()+3600);

          ?>

          注釋:在發(fā)送 cookie 時(shí),cookie 的值會(huì)自動(dòng)進(jìn)行 URL 編碼,在取回時(shí)進(jìn)行自動(dòng)解碼(為防止 URL 編碼,請(qǐng)使用setrawcookie() 取而代之)。

          取回 Cookie 的值

          PHP 的 $_COOKIE 變量用于取回cookie 的值。

          // Print a cookie

          echo $_COOKIE["user"];

          // A way to view all cookies

          print_r($_COOKIE);

          ?>

          刪除 cookie當(dāng)刪除 cookie 時(shí),您應(yīng)當(dāng)使過(guò)期日期變更為過(guò)去的時(shí)間點(diǎn)。

          // set the expiration date to one hour ago

          setcookie("user", "", time()-3600);

          ?>

          如果瀏覽器不支持 cookie 該怎么辦?

          如果您的應(yīng)用程序涉及不支持cookie 的瀏覽器,就不得不采取其他方法在應(yīng)用程序中從一張頁(yè)面向另一張頁(yè)面?zhèn)鬟f信息。一種方式是從表單傳遞數(shù)據(jù)(有關(guān)表單和用戶輸入的內(nèi)容,稍早前我們已經(jīng)在本教程中介紹過(guò)了)。

          下面的表單在用戶單擊提交按鈕時(shí)向"welcome.php" 提交了用戶輸入:

          Name:

          Age:

          取回"welcome.php" 中的值,就像這樣:

          Welcome .

          You are years old.

          四、PHP Sessions

          PHP Session 變量

          當(dāng)您運(yùn)行一個(gè)應(yīng)用程序時(shí),您會(huì)打開(kāi)它,做些更改,然后關(guān)閉它。這很像一次會(huì)話。計(jì)算機(jī)清楚你是誰(shuí)。它知道你何時(shí)啟動(dòng)應(yīng)用程序,并在何時(shí)終止。但是在因特網(wǎng)上,存在一個(gè)問(wèn)題:服務(wù)器不知道你是誰(shuí)以及你做什么,這是由于 HTTP 地址不能維持狀態(tài)。

          通過(guò)在服務(wù)器上存儲(chǔ)用戶信息以便隨后使用,PHP session 解決了這個(gè)問(wèn)題(比如用戶名稱、購(gòu)買(mǎi)商品等)。不過(guò),會(huì)話信息是臨時(shí)的,在用戶離開(kāi)網(wǎng)站后將被刪除。如果您需要永久儲(chǔ)存信息,可以把數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中。

          Session 的工作機(jī)制是:為每個(gè)訪問(wèn)者創(chuàng)建一個(gè)唯一的 id (UID),并基于這個(gè) UID 來(lái)存儲(chǔ)變量。UID 存儲(chǔ)在cookie 中,亦或通過(guò) URL 進(jìn)行傳導(dǎo)。

          開(kāi)始 PHP Session

          在您把用戶信息存儲(chǔ)到 PHPsession 中之前,首先必須啟動(dòng)會(huì)話。

          注釋:session_start() 函數(shù)必須位于

          標(biāo)簽之前:

          上面的代碼會(huì)向服務(wù)器注冊(cè)用戶的會(huì)話,以便您可以開(kāi)始保存用戶信息,同時(shí)會(huì)為用戶會(huì)話分配一個(gè) UID。

          存儲(chǔ) Session 變量

          存儲(chǔ)和取回session 變量的正確方法是使用 PHP$_SESSION 變量:

          session_start();

          // store session data

          $_SESSION['views']=1;

          ?>

          //retrieve session data

          echo "Pageviews=". $_SESSION['views'];

          ?>

          輸出:

          Pageviews=1

          在下面的例子中,我們創(chuàng)建了一個(gè)簡(jiǎn)單的 page-view 計(jì)數(shù)器。isset() 函數(shù)檢測(cè)是否已設(shè)置 "views" 變量。如果已設(shè)置 "views" 變量,我們累加計(jì)數(shù)器。如果 "views" 不存在,則我們創(chuàng)建 "views" 變量,并把它設(shè)置為 1:

          session_start();

          if(isset($_SESSION['views']))

          $_SESSION['views']=$_SESSION['views']+1;

          else

          $_SESSION['views']=1;

          echo "Views=". $_SESSION['views'];

          ?>

          終結(jié) Session

          如果您希望刪除某些session 數(shù)據(jù),可以使用 unset() 或 session_destroy() 函數(shù)。

          unset() 函數(shù)用于釋放指定的 session 變量:

          unset($_SESSION['views']);

          ?>

          您也可以通過(guò)session_destroy() 函數(shù)徹底終結(jié) session:

          session_destroy();

          ?>

          注釋:session_destroy() 將重置 session,您將失去所有已存儲(chǔ)的session 數(shù)據(jù)。

          五、PHP 錯(cuò)誤處理

          錯(cuò)誤處理方法:

          ·簡(jiǎn)單的 "die()" 語(yǔ)句

          ·自定義錯(cuò)誤和錯(cuò)誤觸發(fā)器

          ·錯(cuò)誤報(bào)告

          為了避免用戶獲得類(lèi)似上面的錯(cuò)誤消息,我們?cè)谠L問(wèn)文件之前檢測(cè)該文件是否存在:

          if(!file_exists("welcome.txt"))

          {

          die("File not found");

          }

          else

          {

          $file=fopen("welcome.txt","r");

          }

          ?>

          假如文件不存在,您會(huì)得到類(lèi)似這樣的錯(cuò)誤消息:

          File not found

          比起之前的代碼,上面的代碼更有效,這是由于它采用了一個(gè)簡(jiǎn)單的錯(cuò)誤處理機(jī)制在錯(cuò)誤之后終止了腳本。

          不過(guò),簡(jiǎn)單地終止腳本并不總是恰當(dāng)?shù)姆绞健W屛覀冄芯恳幌掠糜谔幚礤e(cuò)誤的備選的 PHP 函數(shù)。

          創(chuàng)建自定義錯(cuò)誤處理器

          創(chuàng)建一個(gè)自定義的錯(cuò)誤處理器,可以在PHP 中發(fā)生錯(cuò)誤時(shí)調(diào)用該函數(shù)。

          該函數(shù)必須有能力處理至少兩個(gè)參數(shù)(error level 和 error message),但是可以接受最多五個(gè)參數(shù)(可選的:file, line-number 以及error context):

          語(yǔ)法

          error_function(error_level,error_message,

          error_file,error_line,error_context)

          參數(shù)描述

          error_level:必需。為用戶定義的錯(cuò)誤規(guī)定錯(cuò)誤報(bào)告級(jí)別。必須是一個(gè)值數(shù)。參見(jiàn)下面的表格:錯(cuò)誤報(bào)告級(jí)別。

          error_message:必需。為用戶定義的錯(cuò)誤規(guī)定錯(cuò)誤消息。

          error_file:可選。規(guī)定錯(cuò)誤在其中發(fā)生的文件名。

          error_line:可選。規(guī)定錯(cuò)誤發(fā)生的行號(hào)。

          error_context:可選。規(guī)定一個(gè)數(shù)組,包含了當(dāng)錯(cuò)誤發(fā)生時(shí)在用的每個(gè)變量以及它們的值。

          創(chuàng)建錯(cuò)誤處理函數(shù)

          function customError($errno, $errstr)

          {

          echo "Error: [$errno] $errstr

          ";

          echo "Ending Script";

          die();

          }

          現(xiàn)在,我們已經(jīng)創(chuàng)建了一個(gè)錯(cuò)誤處理函數(shù),我們需要確定在何時(shí)觸發(fā)該函數(shù)。

          Set ErrorHandler

          PHP 的默認(rèn)錯(cuò)誤處理程序是內(nèi)建的錯(cuò)誤處理程序。我們打算把上面的函數(shù)改造為腳本運(yùn)行期間的默認(rèn)錯(cuò)誤處理程序。

          可以修改錯(cuò)誤處理程序,使其僅應(yīng)用到某些錯(cuò)誤,這樣腳本就可以不同的方式來(lái)處理不同的錯(cuò)誤。不過(guò),在本例中,我們打算針對(duì)所有錯(cuò)誤來(lái)使用我們的自定義錯(cuò)誤處理程序:

          set_error_handler("customError");

          由于我們希望我們的自定義函數(shù)來(lái)處理所有錯(cuò)誤,set_error_handler() 僅需要一個(gè)參數(shù),可以添加第二個(gè)參數(shù)來(lái)規(guī)定錯(cuò)誤級(jí)別。

          //定義錯(cuò)誤處理函數(shù)

          function customError($errno, $errstr)

          {

          echo "rror: [$errno] $errstr";

          }

          //設(shè)置錯(cuò)誤處理函數(shù)

          set_error_handler("customError");

          //觸發(fā)錯(cuò)誤

          echo($test);

          ?>

          可能的錯(cuò)誤類(lèi)型:

          ·E_USER_ERROR - 致命的用戶生成的run-time 錯(cuò)誤。錯(cuò)誤無(wú)法恢復(fù)。腳本執(zhí)行被中斷。

          ·E_USER_WARNING - 非致命的用戶生成的run-time 警告。腳本執(zhí)行不被中斷。

          ·E_USER_NOTICE - 默認(rèn)。用戶生成的run-time 通知。腳本發(fā)現(xiàn)了可能的錯(cuò)誤,也有可能在腳本運(yùn)行正常時(shí)發(fā)生。

          例子

          在本例中,如果"test" 變量大于 "1",則發(fā)生E_USER_WARNING 錯(cuò)誤。如果發(fā)生了 E_USER_WARNING,我們將使用我們的自定義錯(cuò)誤處理程序并結(jié)束腳本:

          //error handler function

          function customError($errno, $errstr)

          {

          echo "Error: [$errno] $errstr

          ";

          echo "Ending Script";

          die();

          }

          //set error handler

          set_error_handler("customError",E_USER_WARNING);

          //trigger error

          $test=2;

          if ($test>1)

          {

          trigger_error("Value must be 1 or below",E_USER_WARNING);

          }

          ?>

          錯(cuò)誤記錄

          通過(guò) E-Mail 發(fā)送錯(cuò)誤消息

          function customError($errno, $errstr)

          {

          echo "Error: [$errno] $errstr ";

          echo "Webmaster has been notified";

          error_log("Error: [$errno] $errstr",1,

          "526369948@qq.com","From: 526369948@qq.com");

          }

          六、PHP 異常處理

          異常處理用于在指定的錯(cuò)誤(異常)情況發(fā)生時(shí)改變腳本的正常流程。這種情況稱為異常。

          當(dāng)異常被觸發(fā)時(shí),通常會(huì)發(fā)生:

          ·當(dāng)前代碼狀態(tài)被保存

          ·代碼執(zhí)行被切換到預(yù)定義的異常處理器函數(shù)

          ·根據(jù)情況,處理器也許會(huì)從保存的代碼狀態(tài)重新開(kāi)始執(zhí)行代碼,終止腳本執(zhí)行,或從代碼中另外的位置繼續(xù)執(zhí)行腳本

          我們將展示不同的錯(cuò)誤處理方法:

          ·異常的基本使用

          ·創(chuàng)建自定義的異常處理器

          ·多個(gè)異常

          ·重新拋出異常

          ·設(shè)置頂層異常處理器

          Try, throw 和 catch

          要避免上面例子出現(xiàn)的錯(cuò)誤,我們需要?jiǎng)?chuàng)建適當(dāng)?shù)拇a來(lái)處理異常。

          正確的處理程序應(yīng)當(dāng)包括:

          1.Try - 使用異常的函數(shù)應(yīng)該位于"try" 代碼塊內(nèi)。如果沒(méi)有觸發(fā)異常,則代碼將照常繼續(xù)執(zhí)行。但是如果異常被觸發(fā),會(huì)拋出一個(gè)異常。

          2.Throw - 這里規(guī)定如何觸發(fā)異常。每一個(gè) "throw" 必須對(duì)應(yīng)至少一個(gè) "catch"

          3.Catch - "catch" 代碼塊會(huì)捕獲異常,并創(chuàng)建一個(gè)包含異常信息的對(duì)象

          讓我們觸發(fā)一個(gè)異常:

          //創(chuàng)建可拋出一個(gè)異常的函數(shù)

          function checkNum($number)

          {

          if($number>1)

          {

          throw new Exception("Value must be 1 or below");

          }

          return true;

          }

          //在 "try" 代碼塊中觸發(fā)異常

          try

          {

          checkNum(2);//如果拋出異常則執(zhí)行catch中的語(yǔ)句,這里就不接著往下執(zhí)行了

          //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();

          }

          ?>

          上面代碼將獲得類(lèi)似這樣一個(gè)錯(cuò)誤:

          Message: Value must be 1 or below

          創(chuàng)建一個(gè)自定義的 Exception 類(lèi)

          創(chuàng)建自定義的異常處理程序非常簡(jiǎn)單。我們簡(jiǎn)單地創(chuàng)建了一個(gè)專門(mén)的類(lèi),當(dāng) PHP 中發(fā)生異常時(shí),可調(diào)用其函數(shù)。該類(lèi)必須是 exception 類(lèi)的一個(gè)擴(kuò)展。

          這個(gè)自定義的exception 類(lèi)繼承了 PHP 的 exception 類(lèi)的所有屬性,您可向其添加自定義的函數(shù)。

          我們開(kāi)始創(chuàng)建exception 類(lèi):

          class customException extends Exception //extends 相當(dāng)于繼承關(guān)鍵字

          {

          public function errorMessage() //定義了自己的報(bào)錯(cuò)函數(shù)

          {

          //error message 在繼承的類(lèi)中,可以訪問(wèn)基類(lèi)的方法

          $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()

          .': '.$this->getMessage().' is not a valid E-Mail address';

          return $errorMsg;

          }

          }

          $email = "someone@example...com";

          try

          {

          //check if

          if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)

          {

          //throw exception if email is not valid

          throw new customException($email);

          }

          }

          catch (customException $e)

          {

          //display custom message

          echo $e->errorMessage();

          }

          ?>

          這個(gè)新的類(lèi)是舊的exception 類(lèi)的副本,外加 errorMessage() 函數(shù)。正因?yàn)樗桥f類(lèi)的副本,因此它從舊類(lèi)繼承了屬性和方法,我們可以使用 exception 類(lèi)的方法,比如 getLine() 、getFile() 以及 getMessage()。

          多個(gè)異常

          可以為一段腳本使用多個(gè)異常,來(lái)檢測(cè)多種情況。

          可以使用多個(gè)if..else 代碼塊,或一個(gè) switch 代碼塊,或者嵌套多個(gè)異常。這些異常能夠使用不同的 exception 類(lèi),并返回不同的錯(cuò)誤消息:

          class customException extends Exception

          {

          public function errorMessage()

          {

          //error message

          $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()

          .': '.$this->getMessage().' is not a valid E-Mail address';

          return $errorMsg;

          }

          }

          $email = "someone@example.com";

          try

          {

          //check if

          if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)

          {

          //throw exception if email is not valid

          throw new customException($email);

          }

          //check for "example" in mail address

          if(strpos($email, "example") !== FALSE)

          {

          throw new Exception("$email is an example e-mail");

          }

          }

          catch (customException $e)

          {

          echo $e->errorMessage();

          }

          catch(Exception $e)

          {

          echo $e->getMessage();

          }

          ?>

          重新拋出異常

          有時(shí),當(dāng)異常被拋出時(shí),您也許希望以不同于標(biāo)準(zhǔn)的方式對(duì)它進(jìn)行處理。可以在一個(gè) "catch" 代碼塊中再次拋出異常。

          class customException extends Exception

          {

          public function errorMessage()

          {

          //error message

          $errorMsg = $this->getMessage().' is not a valid E-Mail address.';

          return $errorMsg;

          }

          }

          $email = "someone@example.com";

          try

          {

          try

          {

          //check for "example" in mail address

          if(strpos($email, "example") !== FALSE)

          {

          //throw exception if email is not valid

          throw new Exception($email); //拋出Exception異常

          }

          }

          catch(Exception $e) //捕獲Exception異常

          {

          //re-throw exception

          throw new customException($email); //拋出customException異常

          }

          }

          catch (customException $e) //捕獲customException異常

          {

          //display custom message

          echo $e->errorMessage();

          }

          ?>

          設(shè)置頂層異常處理器 (Top LevelException Handler)

          set_exception_handler() 函數(shù)可設(shè)置處理所有未捕獲異常的用戶定義函數(shù)。

          function myException($exception)

          {

          echo "Exception: " , $exception->getMessage();

          }

          set_exception_handler('myException');

          throw new Exception('Uncaught Exception occurred');

          ?>

          在上面的代碼中,不存在 "catch" 代碼塊,而是觸發(fā)頂層的異常處理程序。應(yīng)該使用此函數(shù)來(lái)捕獲所有未被捕獲的異常。

          異常的規(guī)則

          ·需要進(jìn)行異常處理的代碼應(yīng)該放入 try 代碼塊內(nèi),以便捕獲潛在的異常。

          ·每個(gè) try 或 throw 代碼塊必須至少擁有一個(gè)對(duì)應(yīng)的 catch 代碼塊。

          ·使用多個(gè) catch 代碼塊可以捕獲不同種類(lèi)的異常。

          ·可以在 try 代碼塊內(nèi)的 catch 代碼塊中再次拋出(re-thrown)異常。

          簡(jiǎn)而言之:如果拋出了異常,就必須捕獲它。

          七、PHP Include 文件

          服務(wù)器端包含 (SSI) 用于創(chuàng)建可在多個(gè)頁(yè)面重復(fù)使用的函數(shù)、頁(yè)眉、頁(yè)腳或元素。

          PHP include 和 require 語(yǔ)句

          通過(guò) include 或 require 語(yǔ)句,可以將 PHP 文件的內(nèi)容插入另一個(gè) PHP 文件(在服務(wù)器執(zhí)行它之前)。

          include 和 require 語(yǔ)句是相同的,除了錯(cuò)誤處理方面:

          ·require 會(huì)生成致命錯(cuò)誤(E_COMPILE_ERROR)并停止腳本

          ·include 只生成警告(E_WARNING),并且腳本會(huì)繼續(xù)

          語(yǔ)法

          include 'filename';

          或

          require 'filename';

          PHP include 實(shí)例

          例子 1

          假設(shè)我們有一個(gè)名為 "footer.php" 的標(biāo)準(zhǔn)的頁(yè)腳文件,就像這樣:

          echo "

          Copyright ? 2006-" . date("Y") . " W3School.com.cn

          ";

          ?>

          如需在一張頁(yè)面中引用這個(gè)頁(yè)腳文件,請(qǐng)使用 include 語(yǔ)句:

          歡迎訪問(wèn)我們的首頁(yè)!

          一段文本。

          一段文本。

          例子 2

          假設(shè)我們有一個(gè)名為 "menu.php" 的標(biāo)準(zhǔn)菜單文件:

          echo '首頁(yè) -

          HTML 教程 -

          CSS教程 -

          JavaScript 教程 -

          PHP 教程';

          ?>

          網(wǎng)站中的所有頁(yè)面均使用此菜單文件。具體的做法是(我們使用了一個(gè)

          元素,這樣今后就可以輕松地通過(guò) CSS 設(shè)置樣式):

          歡迎訪問(wèn)我的首頁(yè)!

          Some text.

          Some more text.

          例子 3

          假設(shè)我們有一個(gè)名為 "vars.php" 的文件,其中定義了一些變量:

          $color='銀色的';

          $car='奔馳轎車(chē)';

          ?>

          然后,如果我們引用這個(gè) "vars.php" 文件,就可以在調(diào)用文件中使用這些變量:

          歡迎訪問(wèn)我的首頁(yè)!

          include 'vars.php';

          echo "我有一輛" . $color . $car "。";

          ?>

          PHP include vs. require

          require 語(yǔ)句同樣用于向 PHP 代碼中引用文件。

          不過(guò),include與 require 有一個(gè)巨大的差異:如果用 include 語(yǔ)句引用某個(gè)文件并且 PHP無(wú)法找到它,腳本會(huì)繼續(xù)執(zhí)行:

          如果我們使用 require 語(yǔ)句完成相同的案例,echo 語(yǔ)句不會(huì)繼續(xù)執(zhí)行,因?yàn)樵?require 語(yǔ)句返回嚴(yán)重錯(cuò)誤之后腳本就會(huì)終止執(zhí)行:

          注釋:

          請(qǐng)?jiān)诖藭r(shí)使用 require:當(dāng)文件被應(yīng)用程序請(qǐng)求時(shí)。

          請(qǐng)?jiān)诖藭r(shí)使用 include:當(dāng)文件不是必需的,且應(yīng)用程序在文件未找到時(shí)應(yīng)該繼續(xù)運(yùn)行時(shí)。

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【php高級(jí)教程】相關(guān)文章:

        PHP入門(mén)基礎(chǔ)教程大全10-28

        有關(guān)語(yǔ)法和表單的PHP教程08-08

        高級(jí)英語(yǔ)口語(yǔ)教程:This egg is for you01-11

        高級(jí)英語(yǔ)口語(yǔ)教程:表示要加班10-02

        PHP高級(jí)開(kāi)發(fā)工程師的具體職責(zé)(通用18篇)08-28

        關(guān)于php面試寶典及PHP面試技巧08-16

        PHP的壓縮函數(shù)06-21

        調(diào)酒教程10-21

        如何學(xué)好PHP知識(shí)09-20

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 亚洲女同成AV人片在线观看 | 五月综合缴缴情婷婷 | 亚洲色制服中文字幕 | 中文字幕在线欧美日韩 | 欧美一区二区日韩国产 | 午夜精品褔利一区二区三区蜜桃 |

            php高級(jí)教程

              導(dǎo)語(yǔ):php是it行業(yè)語(yǔ)言,也是一門(mén)較熱的網(wǎng)絡(luò)技術(shù),下面就由小編為大家介紹一下php高級(jí)教程,歡迎大家閱讀!

              一、PHP- 多維數(shù)組:

              $cars = array(

              array("huawei","12","11"),

              array("meizu","23","12"),

              array("iphone","12","4")

              );

              $title = array("手機(jī)總共有:","個(gè),已經(jīng)賣(mài)出去了","個(gè)!");

              for($i=0;$i{ for($j=0;$j { echo $cars[$i][$j]; echo $title[$j]; } echo " ";}?>

              輸出:

              huawei手機(jī)總共有:12個(gè),已經(jīng)賣(mài)出去了11個(gè)!

              meizu手機(jī)總共有:23個(gè),已經(jīng)賣(mài)出去了12個(gè)!

              iphone手機(jī)總共有:12個(gè),已經(jīng)賣(mài)出去了4個(gè)!

              二、PHP 日期和時(shí)間

              date() 函數(shù)的格式參數(shù)是必需的,它們規(guī)定如何格式化日期或時(shí)間。

              下面列出了一些常用于日期的字符:

              ·d - 表示月里的某天(01-31) D-表示當(dāng)前這天的英文星期簡(jiǎn)寫(xiě)

              ·m - 表示月(01-12) M-表示當(dāng)前月的英文縮寫(xiě)

              ·Y - 表示年(四位數(shù)) y-表示年(后兩位數(shù))

              ·1 - 表示周里的某天 L-返回0

              其他字符,比如 "/","." 或 "-" 也可被 插入字符中,以增加其他格式。

              echo"今天是 " . date("YYYY/m/d") ." "; //2017201720172017/06/26 由此可見(jiàn)不能用js中yyyy-mm-dd的形式

              echo"今天是 " . date("Y.m.d") . " "; //2017.06.26

              echo"今天是 " . date("Y-M-D") . " "; //17-Jun-Mon

              echo"今天是 " . date("l") . " "; //Monday 星期全稱

              echo"今天是 " . date("L") . " "; //0

              ?>

              獲得簡(jiǎn)單的時(shí)間

              下面是常用于時(shí)間的字符:

              date_default_timezone_set("Asia/Shanghai"); //設(shè)置時(shí)區(qū)

              echo date_default_timezone_get(oid);//獲取當(dāng)前時(shí)區(qū)

              ·h - 帶有首位零的 12 小時(shí)小時(shí)格式 H-24小時(shí)格式

              ·i - 帶有首位零的分鐘 I-0

              ·s - 帶有首位零的秒(00 -59) S-返回th我也不知道是什么鬼

              ·a - 小寫(xiě)的午前和午后(am 或 pm) A-返回大寫(xiě)格式:AM或PM

              echo"現(xiàn)在是 " . date("h:i:sa") . " "; //現(xiàn)在是 02:15:44pm

              echo"現(xiàn)在是 " . date("H:I:SA") . " "; //現(xiàn)在是 14:0:thPM

              通過(guò) PHP mktime() 創(chuàng)建日期

              date() 函數(shù)中可選的時(shí)間戳參數(shù)規(guī)定時(shí)間戳。如果您未規(guī)定時(shí)間戳,將使用當(dāng)前日期和時(shí)間

              語(yǔ)法

              mktime(hour,minute,second,month,day,year)

              $d=mktime(9,12, 31, 6, 10, 215) ;

              echo"創(chuàng)建日期是 " . date("Y-m-d h:i:sa", $d) ." "; //在date方法里面?zhèn)鲄t取的是參數(shù)中的時(shí)間,如果不傳的話則取的是當(dāng)前時(shí)間

              通過(guò) PHP strtotime() 用字符串來(lái)創(chuàng)建日期

              PHP strtotime() 函數(shù)用于把人類(lèi)可讀的字符串轉(zhuǎn)換為Unix 時(shí)間。

              $d=strtotime("10:38pm April 15 2015");

              echo "創(chuàng)建日期是 " . date("Y-m-d h:i:sa", $d);

              如果輸入了它不能識(shí)別的字符串則保存為 1970-01-01 12:00:00am

              計(jì)算兩個(gè)時(shí)間段內(nèi)的時(shí)間所有的周六

              $startdate = strtotime("Saturday");

              $enddate = strtotime("+6 weeks",$startdate);

              while ($startdate < $enddate) {

              echo date("M d", $startdate)," ";

              $startdate = strtotime("+1 week", $startdate); //在$startdate基礎(chǔ)上加一個(gè)禮拜,你還可以加1天,1個(gè)月,1年

              }

              ?>

              計(jì)算距離某一天還有多長(zhǎng)時(shí)間

              $d1=strtotime("2017-7-30");

              $d2=ceil(($d1-time())/60/60/24);

              echo "距離十二月三十一日還有:" . $d2 ." 天。";

              ?>

              三、PHP Cookies

              cookie 常用于識(shí)別用戶。cookie 是服務(wù)器留在用戶計(jì)算機(jī)中的小文件。每當(dāng)相同的計(jì)算機(jī)通過(guò)瀏覽器請(qǐng)求頁(yè)面時(shí),它同時(shí)會(huì)發(fā)送 cookie。通過(guò) PHP,您能夠創(chuàng)建并取回 cookie 的值。

              創(chuàng)建cookie

              setcookie() 函數(shù)用于設(shè)置 cookie。

              注釋:setcookie() 函數(shù)必須位于

              標(biāo)簽之前。

              語(yǔ)法

              setcookie(name, value, expire, path, domain);

              在下面的例子中,我們將創(chuàng)建名為 "user" 的 cookie,把為它賦值 "Alex Porter"。我們也規(guī)定了此 cookie 在一小時(shí)后過(guò)期:

              setcookie("user", "Alex Porter", time()+3600);

              ?>

              注釋:在發(fā)送 cookie 時(shí),cookie 的值會(huì)自動(dòng)進(jìn)行 URL 編碼,在取回時(shí)進(jìn)行自動(dòng)解碼(為防止 URL 編碼,請(qǐng)使用setrawcookie() 取而代之)。

              取回 Cookie 的值

              PHP 的 $_COOKIE 變量用于取回cookie 的值。

              // Print a cookie

              echo $_COOKIE["user"];

              // A way to view all cookies

              print_r($_COOKIE);

              ?>

              刪除 cookie當(dāng)刪除 cookie 時(shí),您應(yīng)當(dāng)使過(guò)期日期變更為過(guò)去的時(shí)間點(diǎn)。

              // set the expiration date to one hour ago

              setcookie("user", "", time()-3600);

              ?>

              如果瀏覽器不支持 cookie 該怎么辦?

              如果您的應(yīng)用程序涉及不支持cookie 的瀏覽器,就不得不采取其他方法在應(yīng)用程序中從一張頁(yè)面向另一張頁(yè)面?zhèn)鬟f信息。一種方式是從表單傳遞數(shù)據(jù)(有關(guān)表單和用戶輸入的內(nèi)容,稍早前我們已經(jīng)在本教程中介紹過(guò)了)。

              下面的表單在用戶單擊提交按鈕時(shí)向"welcome.php" 提交了用戶輸入:

              Name:

              Age:

              取回"welcome.php" 中的值,就像這樣:

              Welcome .

              You are years old.

              四、PHP Sessions

              PHP Session 變量

              當(dāng)您運(yùn)行一個(gè)應(yīng)用程序時(shí),您會(huì)打開(kāi)它,做些更改,然后關(guān)閉它。這很像一次會(huì)話。計(jì)算機(jī)清楚你是誰(shuí)。它知道你何時(shí)啟動(dòng)應(yīng)用程序,并在何時(shí)終止。但是在因特網(wǎng)上,存在一個(gè)問(wèn)題:服務(wù)器不知道你是誰(shuí)以及你做什么,這是由于 HTTP 地址不能維持狀態(tài)。

              通過(guò)在服務(wù)器上存儲(chǔ)用戶信息以便隨后使用,PHP session 解決了這個(gè)問(wèn)題(比如用戶名稱、購(gòu)買(mǎi)商品等)。不過(guò),會(huì)話信息是臨時(shí)的,在用戶離開(kāi)網(wǎng)站后將被刪除。如果您需要永久儲(chǔ)存信息,可以把數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中。

              Session 的工作機(jī)制是:為每個(gè)訪問(wèn)者創(chuàng)建一個(gè)唯一的 id (UID),并基于這個(gè) UID 來(lái)存儲(chǔ)變量。UID 存儲(chǔ)在cookie 中,亦或通過(guò) URL 進(jìn)行傳導(dǎo)。

              開(kāi)始 PHP Session

              在您把用戶信息存儲(chǔ)到 PHPsession 中之前,首先必須啟動(dòng)會(huì)話。

              注釋:session_start() 函數(shù)必須位于

              標(biāo)簽之前:

              上面的代碼會(huì)向服務(wù)器注冊(cè)用戶的會(huì)話,以便您可以開(kāi)始保存用戶信息,同時(shí)會(huì)為用戶會(huì)話分配一個(gè) UID。

              存儲(chǔ) Session 變量

              存儲(chǔ)和取回session 變量的正確方法是使用 PHP$_SESSION 變量:

              session_start();

              // store session data

              $_SESSION['views']=1;

              ?>

              //retrieve session data

              echo "Pageviews=". $_SESSION['views'];

              ?>

              輸出:

              Pageviews=1

              在下面的例子中,我們創(chuàng)建了一個(gè)簡(jiǎn)單的 page-view 計(jì)數(shù)器。isset() 函數(shù)檢測(cè)是否已設(shè)置 "views" 變量。如果已設(shè)置 "views" 變量,我們累加計(jì)數(shù)器。如果 "views" 不存在,則我們創(chuàng)建 "views" 變量,并把它設(shè)置為 1:

              session_start();

              if(isset($_SESSION['views']))

              $_SESSION['views']=$_SESSION['views']+1;

              else

              $_SESSION['views']=1;

              echo "Views=". $_SESSION['views'];

              ?>

              終結(jié) Session

              如果您希望刪除某些session 數(shù)據(jù),可以使用 unset() 或 session_destroy() 函數(shù)。

              unset() 函數(shù)用于釋放指定的 session 變量:

              unset($_SESSION['views']);

              ?>

              您也可以通過(guò)session_destroy() 函數(shù)徹底終結(jié) session:

              session_destroy();

              ?>

              注釋:session_destroy() 將重置 session,您將失去所有已存儲(chǔ)的session 數(shù)據(jù)。

              五、PHP 錯(cuò)誤處理

              錯(cuò)誤處理方法:

              ·簡(jiǎn)單的 "die()" 語(yǔ)句

              ·自定義錯(cuò)誤和錯(cuò)誤觸發(fā)器

              ·錯(cuò)誤報(bào)告

              為了避免用戶獲得類(lèi)似上面的錯(cuò)誤消息,我們?cè)谠L問(wèn)文件之前檢測(cè)該文件是否存在:

              if(!file_exists("welcome.txt"))

              {

              die("File not found");

              }

              else

              {

              $file=fopen("welcome.txt","r");

              }

              ?>

              假如文件不存在,您會(huì)得到類(lèi)似這樣的錯(cuò)誤消息:

              File not found

              比起之前的代碼,上面的代碼更有效,這是由于它采用了一個(gè)簡(jiǎn)單的錯(cuò)誤處理機(jī)制在錯(cuò)誤之后終止了腳本。

              不過(guò),簡(jiǎn)單地終止腳本并不總是恰當(dāng)?shù)姆绞健W屛覀冄芯恳幌掠糜谔幚礤e(cuò)誤的備選的 PHP 函數(shù)。

              創(chuàng)建自定義錯(cuò)誤處理器

              創(chuàng)建一個(gè)自定義的錯(cuò)誤處理器,可以在PHP 中發(fā)生錯(cuò)誤時(shí)調(diào)用該函數(shù)。

              該函數(shù)必須有能力處理至少兩個(gè)參數(shù)(error level 和 error message),但是可以接受最多五個(gè)參數(shù)(可選的:file, line-number 以及error context):

              語(yǔ)法

              error_function(error_level,error_message,

              error_file,error_line,error_context)

              參數(shù)描述

              error_level:必需。為用戶定義的錯(cuò)誤規(guī)定錯(cuò)誤報(bào)告級(jí)別。必須是一個(gè)值數(shù)。參見(jiàn)下面的表格:錯(cuò)誤報(bào)告級(jí)別。

              error_message:必需。為用戶定義的錯(cuò)誤規(guī)定錯(cuò)誤消息。

              error_file:可選。規(guī)定錯(cuò)誤在其中發(fā)生的文件名。

              error_line:可選。規(guī)定錯(cuò)誤發(fā)生的行號(hào)。

              error_context:可選。規(guī)定一個(gè)數(shù)組,包含了當(dāng)錯(cuò)誤發(fā)生時(shí)在用的每個(gè)變量以及它們的值。

              創(chuàng)建錯(cuò)誤處理函數(shù)

              function customError($errno, $errstr)

              {

              echo "Error: [$errno] $errstr

              ";

              echo "Ending Script";

              die();

              }

              現(xiàn)在,我們已經(jīng)創(chuàng)建了一個(gè)錯(cuò)誤處理函數(shù),我們需要確定在何時(shí)觸發(fā)該函數(shù)。

              Set ErrorHandler

              PHP 的默認(rèn)錯(cuò)誤處理程序是內(nèi)建的錯(cuò)誤處理程序。我們打算把上面的函數(shù)改造為腳本運(yùn)行期間的默認(rèn)錯(cuò)誤處理程序。

              可以修改錯(cuò)誤處理程序,使其僅應(yīng)用到某些錯(cuò)誤,這樣腳本就可以不同的方式來(lái)處理不同的錯(cuò)誤。不過(guò),在本例中,我們打算針對(duì)所有錯(cuò)誤來(lái)使用我們的自定義錯(cuò)誤處理程序:

              set_error_handler("customError");

              由于我們希望我們的自定義函數(shù)來(lái)處理所有錯(cuò)誤,set_error_handler() 僅需要一個(gè)參數(shù),可以添加第二個(gè)參數(shù)來(lái)規(guī)定錯(cuò)誤級(jí)別。

              //定義錯(cuò)誤處理函數(shù)

              function customError($errno, $errstr)

              {

              echo "rror: [$errno] $errstr";

              }

              //設(shè)置錯(cuò)誤處理函數(shù)

              set_error_handler("customError");

              //觸發(fā)錯(cuò)誤

              echo($test);

              ?>

              可能的錯(cuò)誤類(lèi)型:

              ·E_USER_ERROR - 致命的用戶生成的run-time 錯(cuò)誤。錯(cuò)誤無(wú)法恢復(fù)。腳本執(zhí)行被中斷。

              ·E_USER_WARNING - 非致命的用戶生成的run-time 警告。腳本執(zhí)行不被中斷。

              ·E_USER_NOTICE - 默認(rèn)。用戶生成的run-time 通知。腳本發(fā)現(xiàn)了可能的錯(cuò)誤,也有可能在腳本運(yùn)行正常時(shí)發(fā)生。

              例子

              在本例中,如果"test" 變量大于 "1",則發(fā)生E_USER_WARNING 錯(cuò)誤。如果發(fā)生了 E_USER_WARNING,我們將使用我們的自定義錯(cuò)誤處理程序并結(jié)束腳本:

              //error handler function

              function customError($errno, $errstr)

              {

              echo "Error: [$errno] $errstr

              ";

              echo "Ending Script";

              die();

              }

              //set error handler

              set_error_handler("customError",E_USER_WARNING);

              //trigger error

              $test=2;

              if ($test>1)

              {

              trigger_error("Value must be 1 or below",E_USER_WARNING);

              }

              ?>

              錯(cuò)誤記錄

              通過(guò) E-Mail 發(fā)送錯(cuò)誤消息

              function customError($errno, $errstr)

              {

              echo "Error: [$errno] $errstr ";

              echo "Webmaster has been notified";

              error_log("Error: [$errno] $errstr",1,

              "526369948@qq.com","From: 526369948@qq.com");

              }

              六、PHP 異常處理

              異常處理用于在指定的錯(cuò)誤(異常)情況發(fā)生時(shí)改變腳本的正常流程。這種情況稱為異常。

              當(dāng)異常被觸發(fā)時(shí),通常會(huì)發(fā)生:

              ·當(dāng)前代碼狀態(tài)被保存

              ·代碼執(zhí)行被切換到預(yù)定義的異常處理器函數(shù)

              ·根據(jù)情況,處理器也許會(huì)從保存的代碼狀態(tài)重新開(kāi)始執(zhí)行代碼,終止腳本執(zhí)行,或從代碼中另外的位置繼續(xù)執(zhí)行腳本

              我們將展示不同的錯(cuò)誤處理方法:

              ·異常的基本使用

              ·創(chuàng)建自定義的異常處理器

              ·多個(gè)異常

              ·重新拋出異常

              ·設(shè)置頂層異常處理器

              Try, throw 和 catch

              要避免上面例子出現(xiàn)的錯(cuò)誤,我們需要?jiǎng)?chuàng)建適當(dāng)?shù)拇a來(lái)處理異常。

              正確的處理程序應(yīng)當(dāng)包括:

              1.Try - 使用異常的函數(shù)應(yīng)該位于"try" 代碼塊內(nèi)。如果沒(méi)有觸發(fā)異常,則代碼將照常繼續(xù)執(zhí)行。但是如果異常被觸發(fā),會(huì)拋出一個(gè)異常。

              2.Throw - 這里規(guī)定如何觸發(fā)異常。每一個(gè) "throw" 必須對(duì)應(yīng)至少一個(gè) "catch"

              3.Catch - "catch" 代碼塊會(huì)捕獲異常,并創(chuàng)建一個(gè)包含異常信息的對(duì)象

              讓我們觸發(fā)一個(gè)異常:

              //創(chuàng)建可拋出一個(gè)異常的函數(shù)

              function checkNum($number)

              {

              if($number>1)

              {

              throw new Exception("Value must be 1 or below");

              }

              return true;

              }

              //在 "try" 代碼塊中觸發(fā)異常

              try

              {

              checkNum(2);//如果拋出異常則執(zhí)行catch中的語(yǔ)句,這里就不接著往下執(zhí)行了

              //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();

              }

              ?>

              上面代碼將獲得類(lèi)似這樣一個(gè)錯(cuò)誤:

              Message: Value must be 1 or below

              創(chuàng)建一個(gè)自定義的 Exception 類(lèi)

              創(chuàng)建自定義的異常處理程序非常簡(jiǎn)單。我們簡(jiǎn)單地創(chuàng)建了一個(gè)專門(mén)的類(lèi),當(dāng) PHP 中發(fā)生異常時(shí),可調(diào)用其函數(shù)。該類(lèi)必須是 exception 類(lèi)的一個(gè)擴(kuò)展。

              這個(gè)自定義的exception 類(lèi)繼承了 PHP 的 exception 類(lèi)的所有屬性,您可向其添加自定義的函數(shù)。

              我們開(kāi)始創(chuàng)建exception 類(lèi):

              class customException extends Exception //extends 相當(dāng)于繼承關(guān)鍵字

              {

              public function errorMessage() //定義了自己的報(bào)錯(cuò)函數(shù)

              {

              //error message 在繼承的類(lèi)中,可以訪問(wèn)基類(lèi)的方法

              $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()

              .': '.$this->getMessage().' is not a valid E-Mail address';

              return $errorMsg;

              }

              }

              $email = "someone@example...com";

              try

              {

              //check if

              if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)

              {

              //throw exception if email is not valid

              throw new customException($email);

              }

              }

              catch (customException $e)

              {

              //display custom message

              echo $e->errorMessage();

              }

              ?>

              這個(gè)新的類(lèi)是舊的exception 類(lèi)的副本,外加 errorMessage() 函數(shù)。正因?yàn)樗桥f類(lèi)的副本,因此它從舊類(lèi)繼承了屬性和方法,我們可以使用 exception 類(lèi)的方法,比如 getLine() 、getFile() 以及 getMessage()。

              多個(gè)異常

              可以為一段腳本使用多個(gè)異常,來(lái)檢測(cè)多種情況。

              可以使用多個(gè)if..else 代碼塊,或一個(gè) switch 代碼塊,或者嵌套多個(gè)異常。這些異常能夠使用不同的 exception 類(lèi),并返回不同的錯(cuò)誤消息:

              class customException extends Exception

              {

              public function errorMessage()

              {

              //error message

              $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()

              .': '.$this->getMessage().' is not a valid E-Mail address';

              return $errorMsg;

              }

              }

              $email = "someone@example.com";

              try

              {

              //check if

              if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)

              {

              //throw exception if email is not valid

              throw new customException($email);

              }

              //check for "example" in mail address

              if(strpos($email, "example") !== FALSE)

              {

              throw new Exception("$email is an example e-mail");

              }

              }

              catch (customException $e)

              {

              echo $e->errorMessage();

              }

              catch(Exception $e)

              {

              echo $e->getMessage();

              }

              ?>

              重新拋出異常

              有時(shí),當(dāng)異常被拋出時(shí),您也許希望以不同于標(biāo)準(zhǔn)的方式對(duì)它進(jìn)行處理。可以在一個(gè) "catch" 代碼塊中再次拋出異常。

              class customException extends Exception

              {

              public function errorMessage()

              {

              //error message

              $errorMsg = $this->getMessage().' is not a valid E-Mail address.';

              return $errorMsg;

              }

              }

              $email = "someone@example.com";

              try

              {

              try

              {

              //check for "example" in mail address

              if(strpos($email, "example") !== FALSE)

              {

              //throw exception if email is not valid

              throw new Exception($email); //拋出Exception異常

              }

              }

              catch(Exception $e) //捕獲Exception異常

              {

              //re-throw exception

              throw new customException($email); //拋出customException異常

              }

              }

              catch (customException $e) //捕獲customException異常

              {

              //display custom message

              echo $e->errorMessage();

              }

              ?>

              設(shè)置頂層異常處理器 (Top LevelException Handler)

              set_exception_handler() 函數(shù)可設(shè)置處理所有未捕獲異常的用戶定義函數(shù)。

              function myException($exception)

              {

              echo "Exception: " , $exception->getMessage();

              }

              set_exception_handler('myException');

              throw new Exception('Uncaught Exception occurred');

              ?>

              在上面的代碼中,不存在 "catch" 代碼塊,而是觸發(fā)頂層的異常處理程序。應(yīng)該使用此函數(shù)來(lái)捕獲所有未被捕獲的異常。

              異常的規(guī)則

              ·需要進(jìn)行異常處理的代碼應(yīng)該放入 try 代碼塊內(nèi),以便捕獲潛在的異常。

              ·每個(gè) try 或 throw 代碼塊必須至少擁有一個(gè)對(duì)應(yīng)的 catch 代碼塊。

              ·使用多個(gè) catch 代碼塊可以捕獲不同種類(lèi)的異常。

              ·可以在 try 代碼塊內(nèi)的 catch 代碼塊中再次拋出(re-thrown)異常。

              簡(jiǎn)而言之:如果拋出了異常,就必須捕獲它。

              七、PHP Include 文件

              服務(wù)器端包含 (SSI) 用于創(chuàng)建可在多個(gè)頁(yè)面重復(fù)使用的函數(shù)、頁(yè)眉、頁(yè)腳或元素。

              PHP include 和 require 語(yǔ)句

              通過(guò) include 或 require 語(yǔ)句,可以將 PHP 文件的內(nèi)容插入另一個(gè) PHP 文件(在服務(wù)器執(zhí)行它之前)。

              include 和 require 語(yǔ)句是相同的,除了錯(cuò)誤處理方面:

              ·require 會(huì)生成致命錯(cuò)誤(E_COMPILE_ERROR)并停止腳本

              ·include 只生成警告(E_WARNING),并且腳本會(huì)繼續(xù)

              語(yǔ)法

              include 'filename';

              或

              require 'filename';

              PHP include 實(shí)例

              例子 1

              假設(shè)我們有一個(gè)名為 "footer.php" 的標(biāo)準(zhǔn)的頁(yè)腳文件,就像這樣:

              echo "

              Copyright ? 2006-" . date("Y") . " W3School.com.cn

              ";

              ?>

              如需在一張頁(yè)面中引用這個(gè)頁(yè)腳文件,請(qǐng)使用 include 語(yǔ)句:

              歡迎訪問(wèn)我們的首頁(yè)!

              一段文本。

              一段文本。

              例子 2

              假設(shè)我們有一個(gè)名為 "menu.php" 的標(biāo)準(zhǔn)菜單文件:

              echo '首頁(yè) -

              HTML 教程 -

              CSS教程 -

              JavaScript 教程 -

              PHP 教程';

              ?>

              網(wǎng)站中的所有頁(yè)面均使用此菜單文件。具體的做法是(我們使用了一個(gè)

              元素,這樣今后就可以輕松地通過(guò) CSS 設(shè)置樣式):

              歡迎訪問(wèn)我的首頁(yè)!

              Some text.

              Some more text.

              例子 3

              假設(shè)我們有一個(gè)名為 "vars.php" 的文件,其中定義了一些變量:

              $color='銀色的';

              $car='奔馳轎車(chē)';

              ?>

              然后,如果我們引用這個(gè) "vars.php" 文件,就可以在調(diào)用文件中使用這些變量:

              歡迎訪問(wèn)我的首頁(yè)!

              include 'vars.php';

              echo "我有一輛" . $color . $car "。";

              ?>

              PHP include vs. require

              require 語(yǔ)句同樣用于向 PHP 代碼中引用文件。

              不過(guò),include與 require 有一個(gè)巨大的差異:如果用 include 語(yǔ)句引用某個(gè)文件并且 PHP無(wú)法找到它,腳本會(huì)繼續(xù)執(zhí)行:

              如果我們使用 require 語(yǔ)句完成相同的案例,echo 語(yǔ)句不會(huì)繼續(xù)執(zhí)行,因?yàn)樵?require 語(yǔ)句返回嚴(yán)重錯(cuò)誤之后腳本就會(huì)終止執(zhí)行:

              注釋:

              請(qǐng)?jiān)诖藭r(shí)使用 require:當(dāng)文件被應(yīng)用程序請(qǐng)求時(shí)。

              請(qǐng)?jiān)诖藭r(shí)使用 include:當(dāng)文件不是必需的,且應(yīng)用程序在文件未找到時(shí)應(yīng)該繼續(xù)運(yùn)行時(shí)。