亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

如何文檔化你的PHP類

2019-09-08 23:11:22
字體:
來源:轉載
供稿:網友
你已經閱讀過關于:面向對象編程可以幫助你管理你的大型web項目,并且你已經開始使用PHP來進行面向對象編程了嗎?如果你已經編寫了幾個類應用在網站上并且你是一個有條理的人的話,那么你應該已經編寫了關于它們的一些文檔。但是如果你是一個象我一樣的不拘小節的人,你只是會在類的源代碼中加一些注釋而沒有別的文檔。沒有文檔就很難記住方法的名字和它們的使用方法(參數和含義)。解決這種情況最典型的辦法就是打開源代碼文件,從成百上千的語句中查找。    

類似Javadoc的文檔  
  應該有一種好的方法----如果你曾經使用過Java語言,你將知道Javadoc文檔系統。這個工具允許你在源代碼文件注釋中插入一些標記,這些標記可以被Javadoc工具進行分析以便生成一系列的HTML頁面把你的類文檔化。那樣在編程的同時你可以開著瀏覽器并且可以得到類列表和帶有說明的類方法的列表。在你開發web應用時,這個可以成為你的參考,提高工作效率和加快開發速度。  

  我的意見是維護一個作為源代碼內的引用文檔要比維護一個獨立的文檔要容易和更實用,因為這個方法更容易保持更新。否則就非常容易變得懶惰從而將對文檔的更新推后到無限期(如果一定要給它加個期限,我想是一萬年)。相反使用象這樣的一個工具,只有一點工作量就是在你正在修改的源代碼附近更新一個標記,接著運行工具再一次生成更新過的HTML頁面。  

一些php文檔工具的預覽  
  在對上面了解了之后,我搜索了一下哪些是可用的,并且我發現了如下一些有趣的工具:  

  phpSearchdoc是enzyme項目的一部分。因為enzyme 是一個巨大的項目,所以需要將其文檔化。那里的開發人員已經編寫了他們自已的文檔系統并且他們非??犊貙⑵渥鳛橐粋€獨立的包進行發布。得到的文檔首先被寫入數據庫,然后可以被一些PHP腳本查看,象一個動態的web站點。  

  從現存的信息中將用于分析的邏輯分離出來的想法相當好,然而phpSearchdoc(版本 1.01)不具有一個真正的分析器,而是從源文件,甚至包括注釋中搜索關鍵字。事實上,對我來說碰巧發生過在我的注釋中存在'function'單詞,結果分析器愚蠢地認為在這個單詞后面的詞就是函數的名字。更不幸的是,我不巧在同一行放了一個單引號('),接著我試圖將數據寫到數據庫中,mysql作出了抱怨(出錯了,因為單引號在 mysql中被用于分割字符串)。  

  而且它的安裝及運行相當困難,因為它還是一個alpha測試版。畢竟比起文檔系統來說它更象是一個交叉引用生成器,正如我知道的,你不能在函數和方法中加入自已的注釋。  

  phpxref,就象名字所指的比起一個真正 的文檔系統來似乎更象是面向交叉引用的生成處理。更進一步說它更適合于正常的過程化編程而不是面向對象編程。  

  phpautodoc的目標是實現象Javadoc 應用于Java那樣用于PHP。它看上去是滿足我的文檔需求的完美解決。為了試驗它我不得不編譯了PHP的CGI版本(我通常使用模塊版本),因為生成器是用PHP編的。我可能容易地在一個Linux系統下編譯和安裝靜態的執行程序,可以使用這些命令:  

rm config.chche  
make clean  
./configure  
make  
cp php /usr/local/bin  

  我決定對它自已的PHP源碼進行測試,并且我發現它只有部分可以工作:它只能夠生成類的文檔(生成整齊的格式),但是不能生成小結。我不知道是否這個只是碰巧發生在我的機器上,但是在試圖生成小結時卻因為core dump(內核崩潰)而停止(PHP 4.0 pl2,RedHat 6.2環境)。假如在你的機器/usr/local/bin下安裝了PHP執行版本,調用它的語法是(為了得到結果我不得不給出php文件和輸出目錄的全路徑)  

./phpautodoc -o  

  phpdoc是一個用來維護在Web站點上的php 文件,并且它非常適合分布式開發方式。文檔是從數據庫中生成;在安裝之后,你可以使用web界面來增加你的類將其文檔化。這個的確有意思,但是它是一種低級的從源代碼中分離文檔的維護方法,這一點就我來說不是非常方便。  

通用工具  
  在經受了試驗所有這些工具但卻得不到怎么成功的挫折之后,直到Pear Project提出了一種標準的解決方法,我發現了一個與PHP完全無關的可工作的工具在Open Source Projects at Apple站點。項目的名字是 HeaderDoc。就象站點所說的" HeaderDoc是一種從C或C++頭文件的注釋中生成HTML的引用文檔的工具。它是用Perl編寫的以便于移植。與JavaDoc 相似,它允許開發者容易地文檔化他們的接口,并且將接口信息輸出到HTML。"  

  是的,你看的沒錯,HeaderDoc只支持C和C++。沒有其它的語言,但是它不象JavaDoc,它大部分依賴寫在注釋中的標記,所以只要做些小改動(我會在后面解釋)就可以很好的用在PHP上。這些標記同JavaDoc很象,HeaderDoc標記的一些例子是@class,@function和@var。  

文檔化一個類  
  OK,讓我們現在進入細節吧。首先讓我們看一下一個類如何被文檔化。  

--------------------------------------------------------------------------------  
/*! @class BagItem  
   @abstract An item in the shopping bag - it is a shopitem with quantity  
   @discussion A BagItem object may be constructed without previous  
   instantiation of neither ShopItem nor Product  
*/  
--------------------------------------------------------------------------------  

文檔化一個類??梢栽谧筮叺膸x擇類的方法。  

  第一件需要注意的事情是用在打開注釋上的風格不完全象JavaDoc注釋/**(一個斜線和兩個星號),而是換成/*!(一個斜線,一個星號和一個感嘆號) 。標記使用也不一樣,但是它們以相似的方式工作。例如,第一個標記是@class標記,它用于文檔化一個類,這個標記跟著類的名字。下一個標記是@abstract 標記,它  
是一個可選的標記,用少量詞語來描述一個類的含義,同時@discussion 標記是另一個可選的標記,用于進一步的討論。當然由你來決定是在@discussion標記中描述所有的事情還是使用@abstract來處理,但是要記住,一般來說,你使用的標記越精確,結果就越好。  

文檔化函數或方法  
  成員函數或方法使用@function標記被文檔化。  

--------------------------------------------------------------------------------  
/*! @function getItemingroup  
   @abstract gets a bagitem of a given group and a given position  
   @param groupno int - the delivery group ordinal position in the bag  
   @param pos     int - the position of the bagitem within the group  
   @result Object - the BagItem in a given position of given group  
or -1 if it could not be found  
*/  
--------------------------------------------------------------------------------  

文檔化一個方法。  

  @function標記聲明了一個函數并且后面跟著函數或成員函數名。然后你可以象前面一樣使用 @abstract和@discussion標記。然而還有兩個額外的標記。@param標記用于描述函數的參數;第一個詞假設為變量的名字,其它的則為任意的文本描述。我建議要聲明想要的變量類型,盡管PHP不是一個強類型語言。 @result標記被用于描述返回值。  

文檔化變量  
  變量或類變量都使用@var標記來描述。在這個標記中,第一個詞被認為是變量的名字,同時其它的則為任意的文本描述。象前面一樣,我建議寫出所期望的變量類型是好的做法。它也是一個文檔化所有類變量的好主意。  


文檔化一個類變量。  

--------------------------------------------------------------------------------  
/*! @var idsession   string - an unique session identifier */  
var $idsession;  
--------------------------------------------------------------------------------  
最后接觸  
--------------------------------------------------------------------------------  
/*! @header myprojectname  
   @abstract a virtual store to shop on mars  
   @discussion The difference [...]  
*/  
--------------------------------------------------------------------------------  
  @header標記用來提供一些關于被文檔化的項目或類組的一般性信息。@header標記本身跟著項目的名字 ,而且可以用@abstract標記和@discussion標記來補充說明。因為類通常存在于不同的文件中(一個文件一個類,且用類的名字給文件名字是一種好的想法),你可能想知道應該將@header 標記放在什么地方。答案很讓人吃驚,哪都可以。我的建議是:如果它比較長就把它放在一個獨立的文件中,或如果是一個簡短的說明就把它放在最重要的類的前面。  

如何修改腳本用于PHP  
  從Apple得到的初始的HeaderDoc腳本是用于C或C++頭文件的,所以要用在PHP中需要對它做一些小改動 。如果你對細節沒有興趣,你可以從這里下 載,并且跳過下面部分。  
  修改源程序所做的唯一的事情就是在主perl文件中,使腳本可以接受.php和.php3后綴。  

--------------------------------------------------------------------------------  
$ diff headerDoc2HTML.pl /usr/local/bin/headerdoc2html  
195c195  
< ($rootFileName = $filename) =~ s/.(h|i)$//;
---
>     ($rootFileName = $filename) =~ s/.(h|i|php|php3)$//;  
--------------------------------------------------------------------------------  
運行腳本  
  在安裝完腳本之后,假設你的類放在classes子目錄下,并且你想將生成的文檔放在docs目錄下,你應該執行這個命令:  

headerdoc2html -o docs classes/*.php  

  不幸的是如果存在多個PHP文件,這個腳本有一個壞習慣就是將那些文件分割到不同的目錄中去,使得在類的文檔中瀏覽變得很困難。而且因為初始的腳本是為C/C++頭文件所寫的(頭文件中只有類和函數的聲明而沒有他們的定義),腳本會將函數名下的所有代碼輸出,直到碰到";",所以典型的就是代碼的第一行。  

  但是在你好不容易讀到現在卻感到絕望之前,放松,因為我寫了一段簡單的腳本來解決這兩個問題。  

--------------------------------------------------------------------------------  
cat classes/*.php | sed 's/ *{/;#{/g' | tr "#" "  
" > docs/all.php  
headerdoc2html -o docs docs/all.php  
rm docs/all.php  
--------------------------------------------------------------------------------  
  如果你想知道為什么我在這里使用tr命令而不是都用sed來做,原因就是用在仍然用在RedHat 6.2上的sed 3.02版本不處理換行符。應該替換成新的版本sed 3.02a。如果你對sed感興趣,可以看SED FAQ。  

  祝你的文檔化工作好運!  



翻譯后話:
  由于這篇文章是在Linux環境下使用的,所以在windows下的使用可能會有問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人亚洲福利一区二区三区| 夜夜嗨av一区二区三区免费区| 最近中文字幕日韩精品| 日韩在线中文视频| 精品国产一区二区在线| 曰本色欧美视频在线| 91人人爽人人爽人人精88v| 色琪琪综合男人的天堂aⅴ视频| 久久网福利资源网站| 韩国三级日本三级少妇99| 日韩一中文字幕| 国模私拍视频一区| 国产97在线视频| 色香阁99久久精品久久久| 91国产美女在线观看| 91在线国产电影| 日韩一区二区精品视频| 国产成人精品日本亚洲| 国产精品欧美久久久| 最近2019年手机中文字幕| 日韩在线观看成人| 国产成人精品一区二区| 久久久在线免费观看| 中文字幕亚洲欧美| 国产精自产拍久久久久久蜜| 欧美一区亚洲一区| 国产女同一区二区| 欧美激情videos| 久久人人爽人人| 韩国欧美亚洲国产| 欧美中文在线观看| 欧美尺度大的性做爰视频| 欧美亚洲国产视频小说| 亚洲韩国欧洲国产日产av| 成人黄色在线播放| 日韩精品在线视频观看| 青青草99啪国产免费| 午夜精品一区二区三区视频免费看| 神马久久久久久| 日本免费在线精品| 97在线视频国产| 国产精品稀缺呦系列在线| 北条麻妃一区二区在线观看| 日韩欧美中文字幕在线观看| 久久久久一本一区二区青青蜜月| 欧美日韩国产色视频| 九九久久综合网站| 国产精品高潮视频| 欧美性xxxx极品高清hd直播| 亚洲а∨天堂久久精品9966| 亚洲国产精品久久久久久| 中文字幕亚洲综合久久筱田步美| 国产精品小说在线| 久久国产视频网站| 第一福利永久视频精品| 欧美午夜宅男影院在线观看| 日本精品性网站在线观看| 性亚洲最疯狂xxxx高清| 91精品久久久久| 国产精品专区一| 日韩国产欧美区| 日韩资源在线观看| 456亚洲影院| 在线日韩第一页| 国产成人高潮免费观看精品| 91高清视频免费| 欧美激情在线观看| 国内精品400部情侣激情| 日韩在线免费观看视频| 亚洲美女在线观看| 日韩视频第一页| 亚洲欧美另类在线观看| 国产亚洲欧美日韩精品| 亚洲人成欧美中文字幕| 日韩成人激情视频| 黑人巨大精品欧美一区二区免费| 亚州国产精品久久久| 欧美三级免费观看| 97碰碰碰免费色视频| 精品伊人久久97| 91精品国产乱码久久久久久蜜臀| 亚洲国产另类 国产精品国产免费| 亚洲精品小视频| 国产精品夜间视频香蕉| 国产精品久久久久久久久久| 中文字幕在线国产精品| 久久男人资源视频| 欧美在线www| 欧美激情综合亚洲一二区| 亚洲va电影大全| www欧美xxxx| 亚洲自拍偷拍色片视频| 日韩综合视频在线观看| 欧美在线视频免费| 国产精品久久久久久久7电影| 麻豆乱码国产一区二区三区| 91亚洲一区精品| 成人精品久久一区二区三区| 国产精品久久久久久久久久久久| 91av视频在线播放| 在线看国产精品| 日韩中文第一页| 欧美日韩亚洲系列| 久久精品国产亚洲7777| 国产亚洲欧美日韩一区二区| 亚洲国产精品嫩草影院久久| 亚洲第一视频网站| 亚洲精品日韩av| 国产一区二中文字幕在线看| 97视频人免费观看| 好吊成人免视频| 亚洲黄色成人网| 狠狠色狠色综合曰曰| 欧美激情免费看| 热99精品里视频精品| 黄色成人在线播放| 中文字幕不卡在线视频极品| 欧美日韩成人在线播放| 国产精品美女免费看| 91精品国产91久久久久久久久| 亚洲欧美自拍一区| 亚洲精品一二区| 亚洲久久久久久久久久久| www.亚洲免费视频| 国产91精品网站| 欧美精品videosex极品1| 久久91亚洲精品中文字幕| 欧美日韩国产影院| 亚洲精品欧美日韩专区| 成人午夜一级二级三级| 国产欧美一区二区三区久久人妖| 国产精品都在这里| 欧美一区二区.| 欧美激情亚洲另类| 国产亚洲日本欧美韩国| 91系列在线观看| 国产性猛交xxxx免费看久久| 色999日韩欧美国产| 国产精品视频免费在线观看| 26uuu久久噜噜噜噜| 亚洲欧美变态国产另类| 成人亚洲综合色就1024| 九九久久久久久久久激情| 国产一区二区三区在线观看视频| 激情亚洲一区二区三区四区| 在线播放国产精品| 亚洲人成电影网| 欧美高跟鞋交xxxxxhd| 亚洲国产欧美在线成人app| 国产成一区二区| 国产成人精品免费久久久久| 97精品视频在线| 在线播放国产一区中文字幕剧情欧美| 国产欧美日韩精品在线观看| 午夜精品在线视频| 成人黄色在线免费| 久久最新资源网| 91亚洲精品一区二区| 久久天堂av综合合色| 欧美视频在线看| 欧美日韩性视频在线| 精品国内自产拍在线观看| 精品久久久久久久久久ntr影视| 自拍偷拍免费精品|