欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單理解PHP的面向?qū)ο缶幊谭绞?/h1>
 更新時(shí)間:2016年05月17日 16:52:21   作者:Kayo Lee  
PHP盡管只被設(shè)計(jì)于運(yùn)行在服務(wù)器軟件上,但仍然包含很多面向?qū)ο蟮囊?比如類(lèi)和方法,本文就帶初學(xué)者來(lái)簡(jiǎn)單理解PHP的面向?qū)ο缶幊谭绞?

與大多數(shù)可以面向?qū)ο蟮木幊陶Z(yǔ)言不一樣, PHP 是同時(shí)支持面向過(guò)程和面向?qū)ο蟮木幊谭绞剑?PHP 開(kāi)發(fā)者可以在面向過(guò)程和面向?qū)ο蠖咧凶杂蛇x擇其一或是混合使用,不過(guò)由于在 PHP5 之前的版本中, PHP 主要還是面向過(guò)程的編程語(yǔ)言,因此大多時(shí)候 PHP 開(kāi)發(fā)者應(yīng)該還是選擇面向過(guò)程的方式進(jìn)行開(kāi)發(fā),事實(shí)上, Kayo 認(rèn)為即使一個(gè) PHP 開(kāi)發(fā)者完全不使用面向?qū)ο?,他也能開(kāi)發(fā)出很出色的 PHP 程序,我們可以想象, Web 頁(yè)面的解析本身就很過(guò)程化,在 HTML 中嵌入面向過(guò)程處理的代碼是非常自然的手段,因此不能說(shuō)面向?qū)ο笫且环N比面向過(guò)程更加優(yōu)秀的編程方式,只是另一種編程選擇,當(dāng)然這里說(shuō)的是 PHP 中的情況。

對(duì)于 PHP 中面向過(guò)程和面向?qū)ο蟾髯缘膬?yōu)缺點(diǎn),相信在網(wǎng)上稍查一下就會(huì)很清楚了,面向過(guò)程開(kāi)發(fā)周期短,發(fā)布快,效率較高,面向?qū)ο箝_(kāi)發(fā)周期長(zhǎng),效率較低但易于維護(hù),改進(jìn),擴(kuò)展和開(kāi)發(fā) API 。顯然易見(jiàn),我們很難說(shuō)哪一個(gè)方式會(huì)更優(yōu)秀,與其爭(zhēng)論哪一種編程方式更優(yōu)秀,不如盡量發(fā)揮出兩種編程方式各自的優(yōu)勢(shì)。

回到 PHP 的面向?qū)ο缶幊?,在使用面向?qū)ο蟮倪^(guò)程中還是很容易就感受到它的優(yōu)勢(shì),最明顯的地方是代碼功能更加清晰,數(shù)據(jù)處理,用戶(hù)登陸,內(nèi)容呈現(xiàn)等各寫(xiě)成一個(gè)類(lèi),在頁(yè)面中只需包含這些類(lèi)、實(shí)例化對(duì)象,然后再用簡(jiǎn)潔的語(yǔ)句應(yīng)用對(duì)象就行,這與面向過(guò)程中把數(shù)據(jù)處理,用戶(hù)登陸,還有內(nèi)容等部分寫(xiě)在一起相比,前者的編程思路肯定更加清晰和易于理解,相信團(tuán)隊(duì)開(kāi)發(fā)中應(yīng)該更為偏向于面向?qū)ο缶幊獭?/p>

下面舉一個(gè)簡(jiǎn)單的例子說(shuō)明一下面向過(guò)程和面向?qū)ο髢煞N方式各自的優(yōu)缺點(diǎn)

在處理表單或接受 url 參數(shù)時(shí),為了防止 SQL 注入等問(wèn)題, PHP 開(kāi)發(fā)者常常需要過(guò)濾字符串。

在面向過(guò)程的方式中,我們會(huì)在需要過(guò)濾字符串的語(yǔ)句中調(diào)用各種過(guò)濾字符串的庫(kù)函數(shù)或自定義函數(shù),這樣下來(lái),頁(yè)面中就會(huì)出現(xiàn)很多不同的過(guò)濾函數(shù)甚至還有復(fù)雜的正則表達(dá)式,即使在頁(yè)面中寫(xiě)了足夠的注釋難免還是比較混亂,下面看看面向?qū)ο蟮奶幚矸绞健?/p>

首先是定義了一個(gè)簡(jiǎn)單的處理字符串的類(lèi),把各種復(fù)雜的字符串處理寫(xiě)成方法(關(guān)于 PHP 面向?qū)ο蟮闹R(shí)可以 Google ,本文不另外敘述。)

<?php 
/* 字符串處理類(lèi)
 * 參數(shù)$length用作判斷字符串是否超過(guò)指定長(zhǎng)度
 * 轉(zhuǎn)義 SQL 語(yǔ)句中使用的字符串中的特殊字符
 * 正則限制字符串內(nèi)只能為數(shù)字
 * 判斷字符串是否為空
 * 判斷字符串長(zhǎng)度
 
*/
 
// 創(chuàng)建字符串處理類(lèi)
class StringFiltration {
 
  // 屬性
  var $length;
 
  // 方法
  // 構(gòu)造方法
  function __construct($the_length = NULL){
    $this->length = $the_length;
  }
  // 轉(zhuǎn)義 SQL 語(yǔ)句中使用的字符串中的特殊字符
  function realEscapeString($the_string){
    return mysql_real_escape_string($the_string);
  }
   
  // 正則限制字符串內(nèi)只能為數(shù)字
  function eregNumber($the_string){
    if( ereg("^[0-9]+$",$the_string) )
      return true;
    else
      return false;
  }
   
  // 判斷字符串是否為空
  function strlenString($the_string){
    return strlen($the_string);
  }
   
  // 判斷字符串長(zhǎng)度
  function ifOverStrlenLength($the_string){
    if( strlen($the_string) > $this->length )
      return true;
    else
      return false;
  }
 
}
 
?>

然后在需要過(guò)濾字符串的頁(yè)面中實(shí)例化該類(lèi)

$string = new StringFiltration(); 

接著在過(guò)濾或判斷字符串時(shí)調(diào)用類(lèi)中定義好的方法,于是頁(yè)面中會(huì)出現(xiàn)一些調(diào)用方法的語(yǔ)句。

$email = $string->realEscapeString($_POST['email']);
$postId = $string->eregNumber($id);

 
在上面的例子中,我們可以看到,在面向?qū)ο筇幚碜址?,我們必須定義一個(gè)類(lèi),然后再在需要的頁(yè)面中實(shí)例化這個(gè)類(lèi)并調(diào)用這個(gè)類(lèi)中的方法,這里看來(lái),面向?qū)ο蟮男氏啾让嫦蜻^(guò)程是低了,而且也很麻煩,不過(guò)這樣的優(yōu)勢(shì)也很明顯,實(shí)際處理或判斷字符串的語(yǔ)句都寫(xiě)在類(lèi)的內(nèi)部,在調(diào)用方法的頁(yè)面并不會(huì)出現(xiàn)各種復(fù)雜的自定義函數(shù)和諸如正則表達(dá)式這樣復(fù)雜的語(yǔ)句,頁(yè)面的結(jié)構(gòu)乃至整個(gè)網(wǎng)站的結(jié)構(gòu)更加清晰了,并且在寫(xiě)好一個(gè)類(lèi)后,日后進(jìn)行 PHP 開(kāi)發(fā)時(shí)都可以再使用這個(gè)類(lèi),從長(zhǎng)遠(yuǎn)來(lái)看效率反而高了。因此一直都在進(jìn)行 PHP 面向過(guò)程編程的開(kāi)發(fā)者不妨換種思路,試試面向?qū)ο蟆?/p>

相關(guān)文章

最新評(píng)論