FleaPHP 開發指南 - 4. 命名規範和目錄結構

來源:互聯網
上載者:User
規範|開發指南

FleaPHP 的命名規則和目錄結構初看上去比較複雜,但習慣以後,你會發現這種命名規則帶來許多好處。因此像 Zend Framework 也是採用同樣的做法。

當然,FleaPHP 對於應用程式的命名規則和目錄結構沒有強制性要求。只不過採用一致的命名規則和目錄結構,可以方便對應用程式維護。同時 FleaPHP 應用程式開發人員之間也可以更容易的進行協作。


全域函數的命名規則

全域函數的命名規則是用“_”分隔全小寫單詞。例如 get_cache()、echo_h()。同時,函數的名字採用“動詞+賓語”的形式。例如 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 的 import()、load_class() 函數方便的載入類定義檔案
  • 如果使用 PHP5,可以很方便的用 __autoload() 來自動載入需要的類定義:
<?phpfunction __autoload($className) {    load_class($className);}?>

缺點:

  • 類名字較長,不便於輸入,例如 FLEA_Com_RBAC_UsersManager
  • 也許和現有習慣不同,需要時間來適應

對於第一個缺點,使用 Zend Development Environment 或者 Eclipse 這樣的 IDE 可以緩解。這些 IDE 提供強大的輸入自動完成功能,通常輸入類名字的開頭幾個字母,就會顯示候選列表讓開發人員選擇。


變數和常量命名

在 FleaPHP 中,變數分為全域變數、臨時變數和模版變數三類。

  • 全域變數和常量

    全域變數和常量都使用全大寫,以“_”分隔。例如 $GLOBALS['CLASS_PATH']FLEA_DIR。不過 FleaPHP 中盡量避免了使用全域變數和常量,因此一般來說不會和應用程式產生衝突。

  • 臨時變數

    函數、類方法中使用的變數都是臨時變數,命名規則是第一個單詞小寫,後續的單詞第一個字母大寫。例如 $requestFilters$dispatcherClass 等。

  • 模版變數

    之所以要把模版變數單獨列出來,是因為不同的模版引擎對變數名有不同的規範。從我個人來說,我傾向於模版變數使用全小寫單詞,並以“_”分隔,例如 $latest_products_list。這樣在程式裡面一眼就能看出哪些變數是用於模版的。


FleaPHP 的目錄結構

一個典型的 FleaPHP 應用程式具有如下的目錄結構:

這個應用程式的目錄主要分為 WebLibs 和 WebRoot。其中 WebLibs 儲存程式的所有代碼,而 WebRoot 目錄下只儲存使用者可以訪問的部分,例如 index.php 入口檔案、圖片、CSS 樣式表和 JS 指令碼。

WebLibs 下又分為 FLEA 和 YORK 兩個目錄。FLEA 目錄儲存 FleaPHP 的核心檔案,而 YORK 目錄儲存應用程式的代碼。之所以取名 YORK,是因為這個項目的公司名為 YORK。所以開發人員在規劃目錄結構時,可以參照這種方式,為儲存應用程式代碼的目錄取一個容易理解的名字。

WebRoot 是儲存使用者使用瀏覽器可以直接存取的內容,因此需要修改伺服器或虛擬機器主機設定,將網站的根目錄指向 WebRoot 目錄。例如 www.example.com 指向 /example/WebRoot/。

這裡介紹的目錄結構有如下優點:

優點:

  • 代碼檔案放置在瀏覽器訪問不到的地方,提高了安全性
  • 程式員和設計人員可以在不同的目錄工作,降低了發生衝突的幾率
  • 目錄結構更清晰,容易理解

而主要的缺點就是需要修改伺服器設定,將網站根目錄指向 WebRoot 目錄。而有些虛擬機器主機不允許這樣做,或者需要聯絡伺服器管理員,比較麻煩。

對於這種目錄結構,放置在 WebRoot 中的 index.php 入口檔案應該明確調用 import() 將 WebLibs 目錄添加到類定義搜尋路徑中。否則 load_class() 會找不到需要的檔案。

<?phprequire('../WebLibs/FLEA/FLEA.php');import('../WebLibs/YORK/');....run();?>

對於虛擬機器主機使用者,可以將 WebLibs 目錄移動到 WebRoot 目錄中。形成如下的目錄結構:

上圖中,所有檔案都儲存在應用程式的根目錄 cdhlss 中,而代碼檔案儲存在 libs 子目錄中。其中 libs/APP 儲存應用程式的代碼。

相應的 index.php 需要修改為:

<?phprequire('libs/FLEA/FLEA.php');import('libs/APP/');....run();?>

在實際開發中,由於 FleaPHP 並沒有強制要求命名規範和目錄結構。所以開發人員可以繼續沿用自己熟悉的方式來開發應用程式。




相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。