網頁

2008年1月23日 星期三

phpDocumentor筆記 - 0 立即體驗

phpDocumentor筆記 0 立即體驗

0 立即體驗

這篇原本是我研究 phpDocumentor 的筆記,怎知愈寫愈多,到了後來都變成了一篇教學文件。變成了教程也不錯,這樣之後學的人也輕鬆多了,因為在我研究 phpDocumentor 的過程中,還發現了一些地方 phpDocumentor 的實作和手冊上寫的不太一樣,所以我了花了些時間把官方手冊上的例子一一測過,以下的例子都是在 phpDocumentor v.1.4.1 和 PHP 5.2.1 下可以使用的。


0.1 簡介

top
若您已經了解什麼是 phpDocumentor ,可以自行跳過。
你喜歡寫文件嗎?我不喜歡。尤其是在趕工的時候,哪來的美國時間寫文件;就算有時間也是希望趕快把事情做完閃人,怎樣都輪不到寫文件的時候。
文件需要嗎?雖然不喜歡寫文件,但文件真的是必要的。對自己而言,正當在趕案子兵荒馬亂的時候,突然要某個以前寫過的函式結果不知道放哪去了,這時心情會很糟很糟的去把以前的碼挖出來一份一份看,才能找出所要的函式,這樣更浪費時間。對於他人而言,要是每個人寫出來的東西都可以再讓其它人了解,並且進一步使用其它人早已寫好的元件,可以讓我們再省下時間來多喝幾杯咖啡。
那要怎麼樣讓編寫文件輕鬆又自在? phpDocumentor 就是一個現成好用的工具,只要在寫程式時順手寫上一點點的註解,困難一點的可以再加上一點點的範例。寫完後交給 phpDocumentor 編譯,一下子圖文並茂的程式文件自動就產生了。而且它還不只可以產生 HTML 檔,還可以產生出 PDF, CHM 等文件。就算產生 HTML 檔,還有許多的風格可以選擇。這樣好用的工具放著不用,實在太可惜了。
這份資料裡,只會出現馬上能用的資料,除了這個簡介外,不會廢話太多,所以文件中的文句也冰冷了些。會這樣做的目的是希望文件的每一個部份都能讓讀者快速吸收,任何一個例子複製下來後馬上能用。文件中的每個樣版我都是精心設計過,起碼我以後要用的時候不必再想說要寫一個類別正常需要哪些 Tag ,只要把樣版複製下來以後就直接可以用了。
由於此文件中資料只有使用上最需要的部份(也是一定能用的部份),因此若在使用上想要了解更多,可以到 phpDocumentor 的官方網站 (http://www.phpdoc.org/)上找到所需資料。
此文件中所有的測試環境是 Windows XP + PHP 5.2.1 + phpDocumetor v.1.4.1。

0.2 安裝

top
phpDocumentor 可以用 PEAR 安裝,在這裡也只介紹這種方式。以下是 Windows 版的安裝步驟:
假設你的 php 目錄在 \php5

步驟

  1. 安裝 PEAR 基本套件
    • 請先查看 \php5\PEAR 裡的內容,若裡面是空的則是還沒安裝 PEAR 基本套件,請以命令列模式下執行 PHP 目錄下的 go-pear.bat。
    • 在執行過程中,會要求回答幾個問題,都用預設值即可。
    • 執行完畢後會在 \php5\PEAR 下裝了 PEAR 基本套件。
  2. 安裝 phpDocumentor在 PHP 目錄下執行以下命令:
    \php5\PEAR\pear install -o PhpDocumentor 
    此命令會安裝 phpDocumentor 及其相依套件。裝好以後, phpDocumentor 的所有程式會放在 \php5\PEAR\PhpDocumentor 裡。
如此就安裝完成。

0.3 改字碼

top
PEAR 有規定,所有的 PEAR 裡的 php 程式都是 iso-8859-1 文件(就是 Latin-1 或「西歐語言」),因此利用 phpDocumentor 產生出的文件,編碼也是預設為 iso-8859-1 。這對使用中文的我們來說很不方便。如果你是和我一樣,不喜歡濫用英文也不喜歡過度強調英文的話,那麼就有需要改變 phpDocumentor 裡的字碼成為 utf-8 使得之後的文件編碼符合我們的需要。

步驟

把 \php5\PEAR\PhpDocumentor\phpDocumentor 裡的(含子目錄)的文件裡的所有 iso-8859-1 的字串全部換成 utf-8 。這種事情我是交給我的文字編輯器 (PSPad) 來做多檔的取代動作。

0.4 一個簡單的範例

top

範例

<?php
/**
* phpDocumentor 使用示範
* 這個檔案是一個簡單的示範
* 內容涵蓋了許多常用的註解方式。
* 有任何的問題請和作者連絡
* @package phpDocumentorExample
* @author 多采多姿 <pkwbim.programming@gmail.com>
* @version 0.1b
*/

/**
* 這是 lib.inc.php 的標題
* 這是 lib.inc.php 的描述
*/
include_once('lib.inc.php');

/**
* 圓周率
* 圓周和直徑的比值
*/
define('pi', 3.14159);

/**
*  這是 funtion1 的註解區塊標題
*  這是 funtion1 的描述
*  @global int 這是函式內第一個全域變數的註解,就是 $global1 的註解
*  @global string 這是函式內第二個全域變數的註解,就是 $global2 的註解
*  @param bool $arg1 這是函式參數 $arg1 的註解
*  @param int|string $arg2 這裡是函式參數 $arg2 的註解
*  @return mixed 傳回值的註解
*/
function function1($arg1, $arg2) {
    global $global1, $global2;
    return array($arg1, $arg2);
}

/**
* 這是MyClass的標題
*
* 建立簡寫型的清單
* 這裡建立一份無序清單
* - 項目一
* - 項目二,
*   每個項目可以是多行,
*   就像這個項目,
*   這行還在項目二中
* - 項目三
* 清單結束,因為沒縮排
* 這裡建立一份有序清單
* 1 有序的項目一,數字後一定要加一個空白。
* 2 有序的項目二
* 有序清單的另一種寫法
* 1. ordered item 1
* 2. ordered item 2
* 清單在此結束
*
* @package phpDocumentorExample
* @author 多采多姿 
* @since 1.0rc1
* @version 0.2b
*
*/
class MyClass {
    /**
     * 這裡是成員變數的註解
     *
     * @var string 成員變數的註解
     * @access private
     */
    private $_variable = "Hello"; 

   /**
    * 這是一個公開的成員函式
    *
    * @param bool $var1 參數1
    * @param string|array $var2 參數1
    * @return void
    * @access public
    */
    public function set_vars($var1, $var2) {
    }
}
?>

0.5 產生文件

top

步驟

  1. phpDocumentor 0.4 範例碼存成 example.php 置於 \project\php_project\下。
  2. 在命令列下用以下指令
    phpdoc --parseprivate -o HTML:frames:earthli -f \project\php_project\example.php -t \project\php_project\docs
    phpdoc --parseprivate -o HTML:Smarty:PHP -d \project\php_project\ -t \project\php_project\docs
  3. 解說
    • --parseprivate: 是將私有 (private) 成員函式或私有變數等等也都加入程式文件裡。沒有這參數的話,產生出的文件裡只會有公開的 (public) 和受保護的 (protected) 的成員函式和變數。
    • -f : 是指針對某個檔案產生註解文件。
    • -d : 針對某個目錄(含其子目錄)產生註解文件。
    • -t : 指定要輸出的目錄
    • -o : 指定輸出格式,上例的格式有兩種
      • HTML:frames:earthli : 是輸出有一種帶有框架 (frame) 的說明文件,所產生出來的文件非常漂亮。Zend Framework 的 API 文件就是採用這種風格。
      • HTML:Smarty:PHP : 產生的文件看起來就像是 PHP 網站上或是 phpDocumentor 官網上的的一樣。
待程式結束後,瀏覽剛剛指定產生文件的目錄下,會有一個 index.html 檔,以瀏覽器打開它就可以看到 phpDocumentor 產生出來的程式文件。倘若在產生文件的過程中,有任何的錯誤,這些錯誤會出現在 error.html檔裡。

1 則留言:

Rob 提到...

非常謝謝您的分享,昨天照著做,在目錄

\php5\PEAR\PhpDocumentor\phpDocumentor

找了半天,就是沒發現含有 iso-8859-1 字串的檔案。後來改從上一層目錄開始一個個慢慢找,總算在

\php5\PEAR\data\PhpDocumentor\phpDocumentor

這個目錄之下的一些 tpl 檔案之中,找到含有 iso-8859-1 字串的檔案。經全部置換成 utf-8 後,果然產製出的文件,都可以正常顯示中文。

我想這或許與我的環境是 PHP 5.3.1 + phpDocumentor v.1.4.3 有關。