全局命名服務定義
命名規範和目錄結構 Posted on 星期三 9 一月 20082007-10-15 17:00
FleaPHP 的命名規則和目錄結構初看上去比較複雜,但習慣以後,你會發現這種命名規則帶來許多好處。因此像 Zend Framework 也是採用同樣的做法。
當然,FleaPHP 對於應用程式的命名規則和目錄結構沒有強制性要求。只不過採用一致的命名規則和目錄結構,可以方便對應用程式維護。同時 FleaPHP 應用程式開發者之間也可以更容易的進行協作。
全局函式的命名規則
全局函式的命名規則是用“_”分隔全小寫的單詞。例如 get_cache()。同時,函式的名字採用“動詞+賓語”的形式。例如 write(動詞)_cache(賓語)。不過有些全局函式為了和 PHP 中已有的類似函式保持一致,採用了不同的命名方式(順便抱怨一下,PHP 自身的全局函式命名比較混亂,各種形式的都有)。
類的命名規則
所有 FleaPHP 自帶的類,都以 FLEA_ 開頭。然後根據用途命名。例如 FLEA_Controller_Action、FLEA_Helper_ImgCode。然後將類名字中的“_”替換為目錄分隔設定,就是這個類的定義檔案所在位置。舉例:
FLEA_Controller_Action 類,保存檔案為 FLEA/Controller/Action.php
FLEA_Db_TableDataGateway 類,保存檔案為 FLEA/Db/TableDataGateway.php
這種命名規則和目錄結構的優缺點如下:
優點
避免命名衝突根據類名字就能找到檔案存放位置
應用程式中可以使用 FleaPHP 的 FLEA::import()、FLEA::loadClass() 方法方便的載入類定義檔案
如果使用 PHP5,可以很方便的用 __autoload() 來自動載入需要的類定義:
>?php
function __autoload($className) {
FLEA::loadClass($className, true);
}
缺點
類名字較長,不便於輸入,例如 FLEA_Rbac_UsersManager也許和現有習慣不同,需要時間來適應
對於第一個缺點,使用 Zend Development Environment 或者 Eclipse 這樣的 IDE 可以緩解。這些 IDE 提供強大的輸入自動完成功能,通常輸入類名字的開頭幾個字母,就會顯示候選列表讓開發者選擇。
變數和常量命名
在 FleaPHP 中,變數分為全局變數、臨時變數和模版變數三類。全局變數和常量
全局變數和常量都使用全大寫,以“_”分隔。例如 $GLOBALS[’CLASS_PATH’] 和 FLEA_DIR。不過 FleaPHP 中儘量避免了使用全局變數和常量,因此一般來說不會和應用程式產生衝突。臨時變數
函式、類方法中使用的變數都是臨時變數,命名規則是第一個單詞小寫,後續的單詞第一個字母大寫。例如 $requestFilters、$dispatcherClass 等。模版變數
之所以要把模版變數單獨列出來,是因為不同的模版引擎對變數名有不同的規範。從我個人來說,我傾向於模版變數使用全小寫單詞,並以“_”分隔,例如 $latest_products_list。這樣在程式裡面一眼就能看出哪些變數是用於模版的。FleaPHP 的目錄結構
一個典型的 FleaPHP 應用程式具有如下的目錄結構:這個應用程式的目錄主要分為 LIBS 和 WEBROOT。其中 LIBS 保存程式的所有代碼,而 WEBROOT 目錄下只保存用戶可以訪問的部分,例如 index.php 入口檔案、圖片、CSS 樣式表和 JS 腳本。
LIBS 下又分為 FLEA、SHARED、ADMIN、FRONT 等目錄。FLEA 目錄保存 FleaPHP 的核心檔案,而 SHARED 目錄保存應用程式前後台共享的檔案、ADMIN 目錄保存應用程式後台專有的代碼、FRONT 目錄保存前台程式專有的代碼。開發者在規劃目錄結構時,可以參照這種方式。
WEBROOT 是保存用戶使用瀏覽器可以直接訪問的內容,因此需要修改伺服器或虛擬主機設定,將網站的根目錄指向 WEBROOT 目錄。 這裡介紹的目錄結構有如下優點:
優點
代碼檔案放置在瀏覽器訪問不到的地方,提高了安全性程式設計師和設計人員可以在不同的目錄工作,降低了發生衝突的幾率
目錄結構更清晰,容易理解
缺點
而主要的缺點就是需要修改伺服器設定,將網站根目錄指向 WEBROOT 目錄。而有些虛擬主機不允許這樣做,或者需要聯繫伺服器管理員,比較麻煩。對於這種目錄結構,放置在 WEBROOT 中的 index.php 入口檔案應該明確調用 FLEA::import() 將 LIBS 目錄添加到類定義搜尋路徑中。否則 FLEA::loadClass() 會找不到需要的檔案。
>?php
require(‘../LIBS/FLEA/FLEA.php’);
FLEA::import(‘../LIBS/SHARED/’);
….
FLEA::runMVC();
對於虛擬主機用戶,可以將 LIBS 目錄移動到 WEBROOT 目錄中。形成如下的目錄結構:
上圖中,所有檔案都保存在應用程式的根目錄 cdhlss 中,而代碼檔案保存在 LIBS 子目錄中。
相應的 index.php 需要修改為:
>?php
require(‘libs/FLEA/FLEA.php’);
FLEA::import(‘LIBS/APP/’);
….
FLEA::runMVC();
在實際開發中,由於 FleaPHP 並沒有強制要求命名規範和目錄結構。所以開發者可以繼續沿用自己熟悉的方式來開發應用程式。