教培參考
教育培訓(xùn)行業(yè)知識型媒體
發(fā)布時(shí)間: 2025年05月26日 09:53
php優(yōu)點(diǎn)
1、語法簡單
如果有學(xué)習(xí)C和Perl的很容易上手,并且跟ASP有部分類似。有成熟的開發(fā)工具,比如NuPHPed,或者Zend Studio等等,再Linux平臺(tái)下可以使用Eclipse等等。
2、開源的框架和系統(tǒng)
有很多開源的框架或開源的系統(tǒng)可以使用,比如比較知名的開源框架有Zend framework、CakePHP、CodeIgniter、symfony等,開源論壇有Discuz!、Phpwind等,開源博客 WordPress,開源網(wǎng)店系統(tǒng)如Ecshop、ShopEx等,開源的SNS系統(tǒng)如UCHome、ThinkSNS等。
3、主流趨勢
目前已經(jīng)很多大型應(yīng)用都是使用PHP,比如淘寶網(wǎng)、Yahoo、163、Sina等等大型門戶,很多選用PHP來作為他們的開發(fā)語言。
4、性能優(yōu)越,可以跨平臺(tái)使用
跨平臺(tái),性能優(yōu)越,跟Linux/Unix結(jié)合別跟Windows結(jié)合性能強(qiáng)45%,并且和很多免費(fèi)的平臺(tái)結(jié)合非常省錢,比如LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)結(jié)合,或者數(shù)據(jù)應(yīng)用夠大可以考慮換 PostgreSQL或者Oracle,支持N種數(shù)據(jù)庫。(N >= 10)
5、有成熟的社區(qū)來支持PHP的開發(fā)。
6、 目前主流技術(shù)都支持。
比如WebService、Ajax、XML等等,足夠應(yīng)用。
7、PHP 5已經(jīng)有成熟的面向?qū)ο篌w系,能夠適應(yīng)基本的面向?qū)ο笠?。適合開發(fā)大型項(xiàng)目。
有很多成熟的框架,比如支持MVC的框架:phpMVC,支持類似ASP.net的事件驅(qū)動(dòng)的框架:Prado,支持類似Ruby On Rails的快速開發(fā)的框架:Cake等等,足夠滿足你的應(yīng)用需求。
9、 有比較完整的支持
比如使用ADODB或者PEAR::DB做數(shù)據(jù)庫抽象層,用Smarty或者smart template做模板層,如果是PHP 5.1的話,還能夠使用PDO(PHP Data Object)來訪問數(shù)據(jù)庫。
PHP缺點(diǎn):
1、混亂的許可證
你也許認(rèn)為PHP是免費(fèi)的,所有的在手冊中提到的PHP模塊也是免費(fèi)的。錯(cuò)了!例如,如果你想在PHP中生成PDF文件,你會(huì)在手冊中發(fā)現(xiàn)兩個(gè)模塊:PDF 和 ClibPDF。但是這兩個(gè)都是有商業(yè)許可證的。所以,你所使用的每個(gè)模塊,你都要確保你同意他的許可證。
2、對多線程支持不太好,大多數(shù)時(shí)候我們只能簡單的模擬去實(shí)現(xiàn)的。
3、語法不太嚴(yán)謹(jǐn),比如變量不需要定義就可以使用,在c,java,c++中變量是必須先定義以后才可以使用的。
4、許多PHP模塊都不是線程安全的
在幾年前,Apache發(fā)布了Web服務(wù)器的2.0版。這個(gè)版本支持多線程模式,在這個(gè)模式下,軟件一個(gè)一部分可以同時(shí)運(yùn)行多個(gè)。PHP的發(fā)明者說PHP的核心是線程安全的,但是非核心模塊不一定是。但是十次有九次,你想要在PHP腳本中使用這種模塊,但這又使你的腳本不能合適Apache的多線程模式。這也是為什么PHP小組不推薦在Apache 2 的多線程模式下運(yùn)行PHP。不良的多線程模式支持使PHP常被認(rèn)為是Apache 2依然不流行的原因之一。
5、PHP 由于商業(yè)原因而不健全
通過使用緩存,PHP的性能可以陡增500%[見基準(zhǔn)測試]。那么為什么緩存沒有被構(gòu)建在PHP中呢?因?yàn)閆end——PHP的制造者,它在銷售自己的Zend Accelerator,所以當(dāng)然,他們不想拋棄自己的商業(yè)產(chǎn)品這塊肥肉。但是有另一個(gè)可選擇的: APC。
6、也許有經(jīng)驗(yàn)的PHP程序員最感到痛苦的地方是PHP的解釋運(yùn)行機(jī)制
這種運(yùn)行機(jī)制使得每個(gè)PHP頁面被解釋執(zhí)行后,所有的相關(guān)資源都會(huì)被回收。也就是說,PHP在語言級別上沒有辦法讓某個(gè)對象常駐內(nèi)存。在PHP中,所有的變量都是頁面級的,無論是全局變量,還是類的靜態(tài)成員,都會(huì)在頁面執(zhí)行完畢后被清空。以JSP為例,在JSP中,Java Bean的scope有四種有效值:Page、Application、Session、Request,分別對應(yīng)頁面、程序、會(huì)話、請求四種生存期。但在PHP中,只有Page一種生存期。
7、不一致的函數(shù)命名規(guī)則
有些函數(shù)名稱是有多個(gè)單詞組成的。一般有三種單詞組合的習(xí)慣:
直接拼接:getnumberoffiles
用下劃線分開:get_number_of_files
駱駝法則:getNumberOfFiles
大部分語言選擇其中一中。但是PHP都用到了。
8、不標(biāo)準(zhǔn)的日期格式字符
很多程序員對 日期格式字符 都很熟悉,它是從UNIX和C語言中來的。其他一些編程語言采用了這個(gè)標(biāo)準(zhǔn),但是很奇怪的,PHP有它自己的一套完全不兼容的日期格式字符。在C中,“%j”表示一年中的當(dāng)天,在PHP中他表示一個(gè)月中的當(dāng)天。然而使事情更混亂的是:Smarty (一個(gè)很流行的PHP模版引擎)的 strftime 函數(shù)和 date_format 函數(shù),卻使用了C/UNIX的格式化字符
微信掃碼關(guān)注公眾號
獲取更多考試熱門資料