PHP 架構 Yaf 學習劄記-預設行為

來源:互聯網
上載者:User
PHP 架構 Yaf 學習筆記----預設行為

Yaf是一個C語言編寫的PHP架構,以php擴充的形式. 是 laruence(鳥哥)? 的作品


laruence 是PHP開發群組成員, PECL開發人員. Yaf, Taint等Pecl擴充作者.


Yaf 相關文章 http://www.laruence.com/tag/yaf?? 線上手冊


線上手冊系統完整的闡述了Yaf的一切,這裡作為學習導讀,列出Yaf的預設行為(契約)


0.Yaf 設定檔(php.ini風格)

其實分兩部分,一個是php.ini中的配置 "yaf." 開頭,這部分通常是不用調整的。

另一部分是Yaf_Application初始化時刻的配置 "application." 開頭

?

配置可以引入php常量定義


1.Yaf 的必須配置,其實就是個目錄設定

yaf.directory=APP_PATHapplication.directory=APP_PATH

也就是 appliction 指令碼目錄,至少要定義一個,application.directory優先


2.Yaf 有一套完整的目錄組織,檔案命名規則

所有Yaf應用都應該遵循下面的目錄組織圖

- index.php //入口檔案- .htaccess //重寫規則    + conf  |- application.ini //設定檔   application/  + controllers     - Index.php //預設控制器  + views         |+ index   //控制器        - index.phtml //預設視圖  + modules //其他模組  - library  - models  //model目錄  - plugins //外掛程式目錄
?

Yaf支援大小寫敏感和不敏感兩種方式,但是我沒有找到大小寫敏感的用法(linux環境)
類命名和搜尋規則
類名稱???????????? 對應目錄
ClassModel????? models
ClassPlugin????? plugins
ClassController controllers
其他??????????????? library


3.Yaf 是通過以包含分隔字元"_"的類名稱配合目錄組織,和完整的類命名規則完成類載入管理

比如以前你有一個Bar類檔案Bar.php,如果用到Yaf裡,並自動載入,那麼就要這樣組織

把Bar.php放到library目錄下的一個子目錄裡面,比如 myclass

並且要更改Bar.php裡面的類名(一般都是Bar的)為MyClass_Bar

也就是說類名必須包含目錄名 具體解釋


4.錯誤處理

Yaf裡面錯誤處理可以通過一個控制器完成,聲明在 APP_PATH/controllers/Error.php 裡

class ErrorController extends Yaf_Controller_Abstract {...} 

當然錯誤控制器是否生效受配置影響

application.dispatcher.throwException=1application.dispatcher.catchException=1

具體看 官方提供的例子


5.視圖view

render視圖需要指定視圖模板檔案,可以用相對(application/views)路徑或者絕對路徑


6.路由

Yaf提供了多種層級的路徑支援,正則路由也有支援,你可以用設定檔寫路由,或者在Bootstrap.php裡面用php指令碼寫路由


個人認為Yaf最迷人的地方是:

PHP Framework in PHP extension,如果沒有資料庫訪問的瓶頸造成的木桶效應,Yaf這種形式是最優的

使用Yaf後在某種層級的應用中記憶體佔用應該降低很多

?

7.BUG?發現如下問題,不知道是否是bug

Yaf在匹配設定檔的節(section)的時候,不是對名稱完全符合,比如配置裡面有

[product]...
new Yaf_Application("conf/app.ini",'p')//照樣可以被匹配到

?

8.MVC

Yaf和大多數架構一樣提供了一個預設的MVC行為,對於M(setDefaultModule)我沒有找到更改生效的方法。
C和V是一一對應的,當然可以名稱不同,可以通過Yaf_Dispatcher的setView方法進行設定。

?

9.單例模式類,Yaf中

Yaf_Application
Yaf_Loader
Yaf_Dispatcher
Yaf_Registry
Yaf_Session
類執行個體是單例,其他不是
需要注意如果在Yaf_Controller_Abstract繼承類action中使用了forward,那將會產生新的執行個體對象。

?

10.非嵌套Dispatcher(2.x版本以下)

Yaf對請求的處理是非嵌套的,這意味著所有對Controller轉移都是非嵌套的,如果一個Controller沒有執行完,發生了轉移,那有可能發生不可知的結果甚至錯誤,Yaf提供的forward是等待當前Controller執行完畢才處理的,因此如果完全按照MVC的方式對請求進行處理,要達到嵌套處理的效果,需要自己實現代碼.流程對應說明

mainloopstart  dispatchLoopStartup     preDispatch//其實是個迴圈受forward控制          這之間request不能發送改變,可以forward但是會被延期執行     postDispatch     forward的request延期執行,迴圈到preDispatch  dispatchLoopShutdown  可以dispatch一個新的request,會開始新的dispatchLoopStartupmainloopend
?



?

  • 聯繫我們

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

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

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.