使用情境:
- 內部工具使用,不希望架構太複雜檔案太大;
- PHP 版本 5.3+,所以可以不需要為了相容 PHP4 而做妥協;
- 不需要太複雜的 DB 封裝,甚至直接用 PDO 都可以接受;
- 有基本的架構功能,路由,參數過濾,表單驗證等;
追加一點:我希望架構夠簡潔,PHP檔案和類在 100 個以內
回複內容:
使用情境:
- 內部工具使用,不希望架構太複雜檔案太大;
- PHP 版本 5.3+,所以可以不需要為了相容 PHP4 而做妥協;
- 不需要太複雜的 DB 封裝,甚至直接用 PDO 都可以接受;
- 有基本的架構功能,路由,參數過濾,表單驗證等;
追加一點:我希望架構夠簡潔,PHP檔案和類在 100 個以內
一直使用 CodeIgniter,後來偶然的機會接觸了後起之秀 —— Laravel 架構。
1. 表現力
你知道下面這行代碼裡 true
代表什麼意思麼?
$uri = Uri::create('some/uri', array(), array(), true);
另外,你知道其他參數在這裡的意思麼(除了第一個)?當然你不知道。因為這行代碼沒有表現力。 表現力 (形容詞): 有效地表達的思想或意思 再看看這段代碼:
$url = URL::to_secure('some/uri');
這個運算式使用 HTTPS 協議建立了一條 URL 連結, 事實上,上面兩種寫法都在做同樣的事情,但那一個更一目瞭然,更富有表現力呢?
富有表現力的代碼(具備自描述特徵)—-意味著可維護的代碼
2. 簡單性
事實上,Web(互連網)的本質是是很簡單的。它是只是請求–響應。 在我構建實現 Laravel 時,我多次這樣告訴自己。我只想用簡單方式實現–捕獲請求並發送響應。
Route::get('home', function() { return View::make('home.index'); });
當然,我們還需要實現其他功能,如驗證、 分頁等。所有這一切在 Laravel 中都實現的更簡單,沒有讓人抓狂的的設定檔。想要進行使用者資訊分頁顯示時預先載入使用者發布的文章嗎?沒問題:
$users = User::with('posts')->paginate();echo $users->links();
請注意上面代碼的簡單直接。你不必告訴 Laravel 當前你在操作什麼頁面,和你沒有建立一些可笑的分頁的設定檔。
文章來源:為什麼選擇 Laravel?
第一個PHP項目使用cakephp,後來完全不用架構手寫了幾年,再後來,由公用部分代碼逐漸抽象出一個路由控制檔案外加幾個常用類庫檔案,模版和代碼分離,就是我們現在的開發架構,底層的東西如果出了問題將是致命的,所以如果不是鑽研架構,自己要快速開發產品,需要一個屬於自己的架構,可以清楚每一行代碼是否會帶來問題以及是否會影響效能,基本上每一種架構都有自己的適應情境,我們的架構對我們的產品來說就很合適,給別人就無法使用,推薦你還是自己寫一個吧,其實也不難,可以根據LazyPHP改造一下。
推薦 ColaPHP,絕對輕量級,編碼風格也很喜歡,作者近期已更新到 2.0RC 版。
https://github.com/fuchaoqun/colaphp
關於效能測試,給個對比測試給你看。
http://www.ruilog.com/blog/view/b6f0e42cf705.html
http://www.slimframework.com/
Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs.
get('/hello/:name', function ($name) { echo "Hello, $name";});$app->run();
FEATURES
- Powerful router
- Standard and custom HTTP methods
- Route parameters with wildcards and conditions
- Route redirect, halt, and pass
- Route middleware
- Template rendering with custom views
- Flash messages
- Secure cookies with AES-256 encryption
- HTTP caching
- Logging with custom log writers
- Error handling and debugging
- Middleware and hook architecture
- Simple configuration
SYSTEM REQUIREMENTS
PHP 5.3.0 or newer
可以試試CI(codeigniter ),文檔齊全,開發又夠簡單快速,適何中小項目
使用者手冊目錄:http://codeigniter.org.cn/user_guide/toc.html
推薦 initPHP 架構,是我目前來說見過相對比較好比較高效的國產PHP架構了。
其擴充開發以及使用都很簡單,上手也很快。
有興趣可以看看: http://www.initphp.com/1_1.htm
===========================================
pdo 目前 我也提供了封裝好的! 到時候可以提供上去。
FatFree我見過最小的PHP架構了
LazyPHP
輕架構。包含一個前端控制器,20個常用函數和用於頁面配置的Layout系統,10分鐘即可學會。LP採用BSD開源協議,在代碼內保留架構名即可隨意商用。
https://github.com/easychen/LazyPHP
Laravel +1 不過是挺大的。LazyPHP 可能是你想要的。
canphp,doitphp這倆個也不錯。
xiunophp (xiunobbs的衍生品所以架構效能可以試試xiunobbs)高負載應用的 PHP 開發架構,共只有34個檔案, 封裝了各種DB(MySQL、MongoDB...), CACHE(Memcached、TTServer、Redis...),良好支援了NoSQL。
Flourish, PHP Unframework
不是嚴格意義上的架構,但是提供了諸如ORM類的功能。
繼續搗亂》 來個國產https://github.com/hfcorriez/pagon
話說沒用過架構,不過今天看到有位大神的部落格說禪道架構才4個檔案,給嚇到了,就去看了下,還真是。單純是為了說人家的檔案少而拿過來推薦的,具體效能什麼的就不清楚了。
禪道PHP架構:http://devel.zentao.net/
更新:今天又看到個架構,檔案數大概是在40左右的樣子,最重要的是...這是我第一個運行成功的例子(就測試了一下MVC的C)..(原諒我是新手)...廢話少說,繼續放上地址:
fatfree: https://github.com/bcosca/fatfree
speedphp,小而輕,上手很容易,支援sae哦!
怎麼沒人推薦thinkPHP呢?當初我在只有一點ASP、html、css的基礎的前提下接觸thinkphp,很短時間內就弄了個《藝客網》(酷站展示的,相對比較簡單,現在換wordpress了)。所以我覺得,相對輕量級的,容易上手的,應該還是值得瞭解一下的。留個連結吧。http://www.thinkphp.cn/
makoframework
http://makoframework.com/
推薦ci和thinkphp架構,ci做小項目還算靈活,和thinkphp架構相比,擴充性沒有thinkphp好一些.另這兩個架構對於新手特別的適合,上手非常的快的.
怎麼都不用zend framework呢? 配上eAccelerator之類的加速,效能完全是能接受的
一直在用zf配合Propel ORM做網站
Silex
基於Symfony2的,以後想搞複雜的,直接上Symfony就可以了
Symfony2 需要php5.3+,項目是php5+的...有種淡淡的憂傷
用了幾個 還是codeignitor最輕最喜歡。
現在是用自己寫的架構, 你說的那些功能都很容易實現, 只要你稍微看過架構的代碼, 而且你不要考慮相容其他背景運行環境, 沒有額外的代碼負擔, 代碼速度效率也快, 我的mysql class用的是meekro.com的, 基本的架構功能,路由,參數過濾,表單驗證 只用了簡單的兩個檔案, 加上meekro的就三個檔案, 一切盡在掌握。
用下thinkphp,國產文檔齊全,交流方便,學習比較簡單吧
使用過 CI 和 ThinkPHP,個人比較傾向於 CI 。
輕量級的最好自己寫一個。適合自己項目最好的才是最好的。
我了個擦,一下蹦出這麼多架構
根據樓主的需求,我推薦一個:TinyMVC 。麻雀雖小,五髒俱全
我自己搞的一個小項目現在差不多了,用的是symfony2,有興趣可以研究一下
推薦一個100行的Router庫做路由控制器 https://github.com/lloydzhou/router,可以根據映射的handler自動從request擷取變數,支援自訂error handler和hook。可以通過hook方便的定製參數過濾、登入檢查等。
(new Router())->error(405, function($message){ header('Location: /hello/world', true, 302);})->get('/hello/:name', function($name){ echo "Hello $name !!!";})->execute();