首頁 後端開發 php教程 PHP的寶庫目錄--PEAR_PHP教程

PHP的寶庫目錄--PEAR_PHP教程

Jul 21, 2016 pm 04:11 PM
php 程式碼 但是 目錄


你可能已經是個PHP的老手了,寫了很多非常棒的程式碼。但是,如果你現在要把它們加入到你現在的專案中去,是否有些吃力?你的朋友想使用你的程式碼作為他的專案中的一個模組,但是你發現你們使用了截然不同的編碼風格,讓他適應,甚至不如重寫一個!
請跟我來,使用PEAR標準寫你的PHP程式吧,你​​的程式將會擁有更大的活力,你的程式和程式碼將會很方便地和其他高手的程式碼融合在一起,PEAR就象CPAN對於PERL一樣,會讓PHP產生更高的能量。

什麼是PEAR
PEAR是PHP擴充與應用程式庫(the PHP Extension and Application Repository)的縮寫。它是一個PHP擴展及應用的一個代碼倉庫,簡單地說,PEAR就是PHP的CPAN。

為什麼要用PEAR?
PHP是一個非常優秀的腳本語言,簡潔、高效,隨著4.0的發布,越來越多的人使用它來進行動態網站的開發,可以說,PHP已經成為最優秀的INTERNET開發語言之一,尤其對於需要能夠快速、有效率地開發中小規模的商業應用的網站開發人員,PHP是其首選的語言。但是隨著PHP的應用的不斷增多,對於這些應用缺乏統一的標準和有效的管理,因此,PHP社區很難象PERL社區的人們那樣方便的共享彼此的代碼和應用,因為PHP缺乏像CPAN那樣的統一的程式碼庫來分類管理應用的程式碼模組(熟悉PERL的人都知道,CPAN是一個巨大的PERL的擴展模組倉庫,編寫的應用模組可以放在CPAN下面的適當的分類目錄下面,其他的人可以很方便地復用,當然,你編寫應用模組時候也需要遵守其中的準則。

PEAR能為我帶來什麼好處?
1.如前所述,PEAR按照一定的分類來管理PEAR應用程式碼庫,你的PEAR程式碼可以組織到其中適當的目錄中,其他的人可以方便地檢索並分享到你的成果。

2.PEAR不只是一個代碼倉庫,它同時也是一個標準,使用這個標準來書寫你的PHP代碼,將會增強你的程序的可讀性,復用性,減少出錯的幾率。

3.PEAR透過提供2個類別為你搭建了一個框架,實現了諸如析構函數,錯誤捕獲功能,你透過繼承就可以使用這些功能。

PEAR的編碼規則
PEAR的編碼規則包括縮進規則,控制結構,函數調用,函​​數定義,註釋,包含代碼,PHP標記,文件頭的註釋塊,CVS標記,URL樣例,常量的命名這11方面。以下簡單介紹一下:

縮排規則:
PEAR中需要使用4個空格來縮排程式碼,且不使用TAB。如果你使用VIM,將下列設定放入你的~/.vimrc中:
set expandtab
set shiftwidth=4
set tabstop=4


如果,你使用Emacs/XEmacs,需要把indent-tabs-mode 設定成nil。

不過你像我一樣喜歡用(X)Emacs編輯PHP文件,我強烈建議你安裝PHP-MODE,這樣當你寫PEAR程式碼的時候,它會自動調整你的縮排風格,當然PHP-MODE還有許多很優秀的特性,你可以從資源清單中的地方下載最新版的PHP-MODE。

控制結構:
這裡所說的控制結構包括: if for while switch 等。對於控制結構,在關鍵字(如if for ..)後面要空一個格,然後再跟控制的圓括號,這樣,不至於和函數調用混淆,此外,你應該盡量完整的使用花括號{},即使從語法上來說是可選的。這樣可以防止你以後需新增新的程式碼行時產生邏輯上的疑惑或錯誤。這裡有一個範例:
if ((條件1) && (條件2)) {
語句1;
}esleif ((條件3)
(條件4)) {
語句2;
}else {
語句3;
}




函數呼叫:
對於函數調用,函​​數名稱和左括號( 括號( 括號( )間不應該有空格,對於函數參數,在分隔的逗號和下一個參數之間要有相同的空格分離,最後一個參數和右括號之間不能有空格。下面是標準的函數呼叫;
$result = foo($param1, $param2, $param3);
不規範的寫法:
$result=foo ($param1,$param2,$param3 );
$result=foo( $param1,$param2, $param3 );




此外,如果要將函數的傳回結果賦值,那麼在等號賦值和賦值的變數之間要有空格,同時,如果是一系列相關的賦值語句,你加入適當的空格,使它們對齊,就像這樣:
$result1 = $foo($param1, $param2 , $param3);
$var2 = $foo($param3);
$var3 = $foo($param4, $param5);




函數定義:
函數定義遵循"one true brace"習俗:
function connect(&$dsn, $persistent = false)
{
if (is_array($dsn)) {
$ dsninfo = &&dsn;
} else {
$dsninfo = DB::parseDSN($dsn);
}

if (!$dsninfo
!$dsninfo['phptype' ]) {
return $this->raiseError();
}
return true;
}


如上所示,可選參數要在參數表的末端,並且總是盡量傳回有意義的函數值。

關於註釋:
對於類的線上文檔,應該能夠被PHPDoc轉換,就像JavaDoc那樣。 PHPDoc也是一個PEAR的應用程序,更詳細的介紹你可以去 http://www.phpdoc.de/ 查看。除了類別的線上文檔,建議你應該使用非文檔性質的註解來詮釋你的程式碼,當你看到一段程式碼時想:哦,我想不需要在文檔裡去仔細描述它。那麼你最好給這段程式碼作一個簡單的註釋,這樣防止你會忘記它們是如何運作的。對於註解的形式,C的 /* */和C 的//都不錯,不過,不要使用Perl或shell的#註解方式。

包含程式碼:
無論什麼時候,當你需要無條件包含進一個class文件,你必須使用requre_once;當你需要條件包含進一個class文件,你必須使用include_once;這樣可以保證你要包含的文件只會包含一次,並且這2個語句共用同一個文件列表,所以你無須擔心二者會混淆,一旦require_once 包含了一個文件,include_once不會再重複包含相同的文件,反之亦然。

PHP程式碼標記:
任何時候都要用定義你的php程式碼,而不要簡單地使用 ?>,這樣可以保證PEAR的兼容性,也利於跨平台的移植。

文件頭的註解聲明:
所有需要包含在PEAR核心發布的PHP程式碼文件,在文件開始的時候,你必須加入以下的註解聲明:
/* vim: set expandtab tabstop=4 shiftwidth=4: */

// --------------------------------- -------------------------------------

// | PHP version 4.0 |

// ------------------------------------------ ----------------------------

// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |

// -------------------------------------- --------------------------------

// | This source file is subject to version 2.0 of the PHP license, |

// | that is bundled with this package in the file LICENSE, and is |

// | available at through the world-wide-web at |

// | http://www.php.net/license/2_02.txt. |

// | If you did not receive a copy of the PHP license and are unable to |

// | obtain it through the world-wide-web, please send a note to |

// | license@php.net so we can mail you a copy immediately. | >
// -------------------------------------------- --------------------------

// | Authors: Original Author |

// | Your Name |

// ---------------------------------------- ------------------------------

//

// $Id$


對於不在PEAR核心程式碼庫中的文件,建議你也在文件的開始處有這樣一個類似的註解區塊,標明版權,協議,作者等等。同時也在第一行加入VIM的MODELINE,這樣在VIM中才能維持PEAR的程式碼樣式。

CVS標記:
如上面所展示那樣,在每個文件中加入CVS的ID標記,如果你編輯或修改的文件中沒有這個標記,那麼請加入,或者是替換原文件中相類似的表現形式(如"Last modified"等等)

URL樣本:
你可以參考RFC 2606,使用"www.example.com"作為所有的URL樣本。

常數命名:
常數應該盡量使用大寫,為了便於理解,使用下劃線分割每個單字。同時,你應該常數所在的包名或是類別名稱作為前綴。例如,對於Bug類別中常數應該以Bug_開始。以上是PEAR的編碼規則,詳細的編碼規則可以參考PEAR中的CODING_STANDDARD文件的說明。為了更好地理解這些編碼規則,你也可以參考一下現有PEAR核心模組的程式碼。

開始使用PEAR

PEAR
使用PEAR很簡單,只需這樣定義自己的PEAR程式:
require_once "PEAR.php"; extends PEAR{
你的類別定義...
}




當然,你需要遵守前面說的PEAR的編碼規則,之後你就可以在你的類別內部實作你要做的事情了。下面,我們展開討論一下,實際上PEAR為我們提供了2個預定義類:
PEAR:這是PEAR的基類,所有的PEAR擴充都要從它繼承衍生出來。
PEAR_Error:PEAR的錯誤處理的基底類,你可以選擇衍生出自己的錯誤處理的類別。

一般來說,你不應該直接創建PEAR的實例,而是要自己派生出一個新的類,然後再創建這個新類的實例。作為基底類,PEAR為我們提供了一些有用的功能,最主要的就是析構函數和錯誤處理

析構函數
PHP支援建構函數,但是並不支援析構函數,不過,PHP提供register_shutdown_function()這個函數,以便能夠在腳本終止前回呼註冊的函數,因此PEAR利用這個特性,提供了析構函數的模擬。假如你有一個PEAR的子類,叫做mypear,那麼在mypear類中,你可以定義一個函數,函數名是下劃線加上你的類名,_mypear(),這個函數就是這個類的析構函數。不過這個析構函數和C 中的析構函數不太一樣,它不會在物件被刪除的時候執行,而是在腳本結束的時候,畢竟這只是一個模擬。由於是使用了register_shutdown_function(),所以在你的析構函數裡,列印的資訊將不會回到瀏覽器中。另外,在你的建構子中,需要呼叫它的父類別的建構函數,因為PHP不會自動呼叫父類別的建構函數,而析構函數需要在PEAR的建構子中註冊,我們可以看看PEAR的原始碼:
<br>function PEAR() { <br>if (method_exists($this, "_".get_class($this))) { <br>global $_PEAR_destructor_object_list; $_PEAR_destructor_object_list[] = &&this; <br>} <br>if ($this->_debug) { <br>printf("PEAR constructor called, class=%sn", <br>get_class($this); 🎜>} <br>..... <br>function _PEAR_call_destructors() { <br>global $_PEAR_destructor_object_list; <br>if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) { <br>reset($ _PEAR_destructor_object_list); <br>while (list($k, $objref) = each($_PEAR_destructor_object_list)) { <br>$destructor = "_".get_class($objref); <br>$destructor = "_".get_class($objref); $destructor)) { <br>$objref->$destructor(); <br>} <br>} <br>//清空已註冊的物件列表, <br><br>//防止重複呼叫<br><br>$_PEAR_destructor_object_list = array(); <br><br>} <br><br>} <br><br>.... <br>register_shutdown_function("__EARc code> <br><br><br><br><br>上面這段程式碼展示了PEAR是如何實現析構函數的,在構件函數中,將檢查當前類別中是否有析構函數,如果有,那麼將把當前類別的參考放入一個全局列表中,在_PEAR_call_destructors中,則檢查這個全局列表中的每個元素是否存在相應的析構函數,如果有,則調用它,最後將全局列表清空。 <br><br>在PEAR.php的最後一行程式碼,則呼叫register_shutdown_function("_PEAR_call_destructors"),註冊_PEAR_call_destructors,這樣,當腳本執行完畢的時候,PHP會回呼這個函數。使用析構函數,你可以在處理完用戶的請求,退出之前做一些必要的"善後"工作,典型的例子是,你可以關閉打開的文件,斷開數據庫的連接,將某些數據存入磁碟等等。 <br><br>錯誤處理<br>PEAR中可以讓你有很多的方式來處理錯誤,你不僅僅是簡單地返回一個錯誤代碼,或者錯誤的信息,而是可以返回一個PEAR_Error對象,或者是由PEAR_Error衍生出來的新的錯誤物件。 <br><br>PEAR中的錯誤物件的並沒有限定具體的輸出形式,它可以僅僅是捕獲錯誤,不給用戶返回太多的信息,也可以是去回調一個特殊錯誤處理函數,同時,即使輸出錯誤訊息,它也強迫你必須要是HTML形式,你可以輸出XML,CSV形式,或者是其他你自己定義的形式,你只需要從PEAR_Error派生一個新的類,然後在適當的時候創建並"拋出"這個新類別的物件就可以了。 <br><br>簡單的錯誤處理: <br>在PEAR中,最簡單的錯誤處理是"拋出"這個錯誤,你只要簡單地創建並返回一個PEAR_Error的對象就可以了。以下是一個簡單的範例: <br><code> <br>function myconnect($host = "localhost", $port = 1080) <br>{ <br>$fp = fsockopen($host, $port, $ errno, $errstr); <br>if (!is_resource($fp)) { <br>return new PEAR_Error($errstr, $errno); <br>} <br>return $fp; <br>} <br>} <br>return $fp; <br>} <br><br>$sock = myconnect(); <br>if (PEAR::isError($sock)) { <br>print "connect error: ".$sock->getMessage()."<br>n" <br>} <br>


如上面程式碼所顯示的,在執行一段可能產生錯誤的程式碼後,你需要使用PEAR的isError來偵測是否有錯誤,並且可以使用PEAR_Error的getMessage來取得最近一次的錯誤訊息。注意:一定要在關鍵的地方使用使用PEAR::isError

使用raiseError

PHP4.0.5以後,PEAR多了2個函數:
setErrorHandling($mode, $options = null)
raiseError($message = null, $code = null, $mode = null,$options = null, $userinfo = null)


前者可以設定PEAR缺省的錯誤處理模式,後者是一個包裝函數,返回一個PEAR_Error的對象,和直接創建並返回PEAR_Error的對象略有不同的是,如果省略$mode,$options等參數,它會使用缺省值來創建這個PEAR_Error的對象,這些缺省值你可以使用setErrorHandling()來定制。

PEAR_Error
PEAR_Error是PEAR的錯誤物件的一個基底類,和PEAR不同,一般來說,你可以直接建立PEAR_Error的實例,建立方式:
$error = new PEAR_Error($ message, $code, $mode, $options, $userinfo);

$message是你的錯誤訊息,$code是該錯誤的錯誤號碼,後3個參數是緊密聯繫的:
$mode: 是這個錯誤的處理模式,可以下列常數:
PEAR_ERROR_RETURN:只回傳該錯誤物件(缺省方式)
PEAR_ERROR_PRINT:在建置函數中列印這個錯誤訊息,但是目前程式會繼續運作。
PEAR_ERROR_TRIGGER:使用PHP的trigger_error() 觸發錯誤,如果你已經設定了錯誤處理函數,或是你把PHP的錯誤處理等級設定為E_USER_ERROR,那麼目前程式將會被終止。
PEAR_ERROR_DIE:列印錯誤並退出,程式終止。
PEAR_ERROR_CALLBACK:使用一個回呼函數或方法來處理目前錯誤,程式終止。
$options:這個參數只有在$mode是PEAR_ERROR_TRIGGER和PEAR_ERROR_CALLBACK的時候才起作用,如果是PEAR_ERROR_TRIGGER,$options必須是E_USER_NOTICE, E_USER_WARNING E_USER_ERNING E_USER_ERRORICE, E_USER_RORAING 或 E_USER_ERROR.3個常數。如果$mode是PEAR_ERROR_CALLBACK,$options可以是一個字串,內容是要回調的函數名,也可以是一個2元素的數組,分別是一個物件變量,和一個字串(標明要呼叫的方法)。
$userinfo:存放附加的使用者資訊,你可以把相關的偵錯資訊放在這裡。

PEAR_Error中有一些常用的方法,這些方法在PHP文擋沒有描述,這裡一一列出:

int getMode:傳回目前的錯誤處理模式,整型。
string getMessage:傳回目前完整的錯誤訊息,字串。
mixed getCallback:傳回目前的回呼訊息,可能是所回呼的函數名,或是(對象,方法)的陣列。
int getCode:傳回整數的錯誤碼。
string getType:傳回錯誤的型別,也就是目前的類別名,字串。
string getUserInfo:傳回附加的使用者訊息,字串。
string getDebugInfo:內容同上。
string toString:傳回目前物件的詳細字串描述,內容包括錯誤處理的模式,級別,錯誤訊息,錯誤代碼,相關回調函數等等。

總結
至此,對於PEAR的介紹就結束了。概括地說,如果你要做一個PEAR的擴充應用,需要這麼做:

require_once "PEAR.php"
使用class your_pear_extend extends PEAR{}定義你的新類別。
在你的類別的建構子中,呼叫父類別PEAR的建構子:
function your_pear_extend{

$this->PEAR();

...
}



如果需要,定義你的析構函數_your_pear_extend
如果需要,從PEAR_Error派生出你自己的錯誤處理類別
設定你的錯誤處理模式,並在適當的時候觸發錯誤。

執行可能產生錯誤的程式碼後,用PEAR::isError($obj)捕捉對應的錯誤。 實現你自己的功能。 在最新的PHP4.05的PEAR核心發布裡,已經有不少優秀的應用模組了,比如:PHPDoc,Cache,HTML...當然,相對於CPAN來說,PEAR只是剛起步,需要PHP社區的人們的共同努力,來完善它,增強它,PHP才會越來越強大。

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/313979.htmlTechArticle你可能已經是個PHP的老手了,寫了很多非常棒的程式碼。但是,如果你現在要把它們加入到你現在的專案中去,是否有些吃力?你的朋友想讓...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1319
25
PHP教程
1269
29
C# 教程
1248
24
在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

See all articles