① 相對於別的php框架來說thinkphp有什麼缺點
PHP框架對於立項來說非常重要,影響的是團隊的開發效率和後續的維護開發成本,而對於框架又是蘿卜青菜各有所愛。同樣一個框架,有人愛到極點,有人罵為垃圾。所以做個整理,各取所需。
1、從Github數據來看,Laravel高居榜首,而它在國外也是用的人最多的。Laravel優點是代碼優雅簡潔;缺點是依賴其他擴展,內部事先復雜,系統復雜時需要配置大量的路由規則,文檔少,版本更新快且不連續。
2、ThinkPHP國人開發維護,優點是中文文檔完善,社區活躍;缺點是高頻單字母函數讓人不知所雲,代碼並不優雅。適合於國人快速開發一些Web系統。個人感覺缺少ORM。
3、phalcon是C寫的PHP框架,以PHP擴展形式載入,優勢是性能絕對的第一,是其他框架的十倍,但缺點是學習成本高,一旦發現框架bug對於不懂C和PHP擴展的同學來說幾乎是死穴。
4、Yii,華裔開發,所以交流上比較順暢,優點是強大的組件,豐富的類庫,成熟的模式,方便的gii,各式的widget,支持ORM,支持多語言國際化,代碼干凈。缺點是入門容易,精通很難,需要懂其設計思想。
多角度對比
性能:phalcon > yii ≈ laravel,因為phalcon使用C語言開發,以php擴展的方式載入,這樣不需要對框架進行額外的解析和執行,所以性能好
代碼可讀性:laravel更勝一籌(表現力較強,不懂php基本也能看懂他在做什麼)
開發速度:yii ≥ laravel > phalcon
學習成本、使用成本:yii ≥ laravel > phalcon
綜上所述,整體上Yii相對突出,適合中大型項目;ThinkPHP適合快速開發和中小型項目;phalcon適合高性能要求的項目;Laravel適合簡潔對代碼有最追求的同學。大家各取所需。
② php7中為什麼不能用
PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標准通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
php7
1. 不要使用 mysql_ 函數
這一天終於來了,從此你不僅僅「不應該」使用mysql_函數。PHP 7 已經把它們從核心中全部移除了,也就是說你需要遷移到好得多的mysqli_函數,或者更靈活的 PDO 實現。
2. 不要編寫垃圾代碼
這一條可能易於理解,但是會變得越來越重要,因為 PHP 7 的速度提升可能會隱藏你的一些問題。不要僅僅滿足於你的站點速度,因為遷移到 PHP 7 才讓它變快。
為了理解速度有多重要,以及如何把事情做得更好,請看一看我們的文章速度優化入門指南。
作為一名開發者,你應該總是確保按需載入腳本,盡可能連接它們,編寫高效的資料庫查詢,盡可能使用緩存,以及其它。
3. 不要在文件末尾使用 PHP 閉合標簽
你可以看一看,當一個文件以 PHP 代碼結尾時,WordPress 多數核心代碼都把末尾的 PHP 標簽去掉了。實際上,Zend 框架特別禁止了它。PHP 並不需要文件末尾的閉合標簽,並且我們可以通過去掉它來保證不會在後面添加任何的空白字元。
4. 不要做不必要的引用傳遞
我個人不喜歡引用傳遞。我知道有時候它很實用,但是其它情況下它使代碼變得難懂,並且更難預測結果。
據說一些人認為它使代碼運行更快,但是根據一些 PHP 高級程序員所說,這並不正確。
說明引用為什麼不好的一個例子是,PHP 內建了shuffle()和sort()。它們修改原始數組,而不是返回處理後的數組,這很不合邏輯。
5. 不要在循環中執行查詢
在循環中執行查詢非常浪費。它給你的系統施加不必要的壓力,並且可能能夠在循環外部更快獲得相同結果。當我遇到需要這樣的情況時,我通常會使用兩個分離的查詢來解決問題,我會使用它們來構建數據數組。之後我會遍歷數組,並不需要在這個過程中執行查詢。
由於 WordPress 適用於這里,它可能有一些例外。雖然get_post_meta() 會從資料庫獲取大量數據,如果你正在遍歷某個特殊博文的元數據你可以在循環中使用它。這是因為當你第一次調用它的時候,WordPress實際上會獲取所有元數據並緩存它們。後續的調用使用這些緩存數據,沒有資料庫的調用。
弄懂這些的最佳方式是閱讀函數文檔,以及使用類似 Query Monitor 的工具。
6. 不要在 SQL 查詢中使用 *
當然,這個更像 MySQL 的問題,但是我們習慣在 PHP 中編寫 SQL 代碼,所以都差不多。無論如何,如果可以避免的話,不要在SQL 查詢里使用通配符,尤其是資料庫有很多列的時候。
你應該明確指定需要哪些行,並且僅僅獲取它們。這有助於減少所用資源,保護數據,以及讓事情變得盡可能清晰。
對於 SQL,你需要了解所有可用的函數,並且盡可能測試其速度。在計算均值、求和或計算類似數值時,要使用 SQL 函數而不是PHP 函數。如果你不確定某個查詢的速度,測試它並且嘗試一些其它的編譯 — 之後使用最好的那個。
7. 不要信任用戶輸入
信任用戶輸入是不明智的。始終校驗、過濾、轉義、檢查並留好退路。用戶數據存在三個問題:我們開發者並沒有考慮每種可能性,它通常不正確,以及它可能是蓄意破壞。
經過周密考慮的系統可以防護這些威脅。要確保使用類似filter_var()的內建函數檢查適當的值,以及在處理資料庫時轉義(或預編譯)。
WordPress 擁有一些函數來解決問題。詳見文章校驗、轉義和過濾用戶數據。
8. 不要故作聰明
你的目標應該是編寫優雅的代碼,來更清晰地表達你的意圖。你可能能夠通過將任何東西縮短為一個單詞的變數,使用多層的三元邏輯,以及其它手段,從每個頁面中優化 0.01 秒。但這只會給你和你周圍的人產生大麻煩。
合理命名變數,為代碼編寫文檔,優先選擇清晰而不是簡潔。甚至還可以更好,使用標準的面向對象代碼,它本身或多或少就是文檔,不需要一大堆內聯數值。
9. 不要重新發明輪子
PHP 到現在為止有很長時間了,網站被造出來的時間更長。很可能無論你需要造出什麼,一些人之前早就造出來了。不要害怕向他人尋求支持,Github是你的好朋友,Composer也是,Packagist也是。
從日誌工具到調色工具,從性能分析器到單元測試框架,從 Mailchimp API 到 Twitter Bootstrap,每個東西都可以通過按下按鍵(或者敲下命令)來獲取,使用它們吧!
10. 不要忽略其它語言
如果你是個 PHP 程序員,現在有個好機會去至少了解 HTML、CSS、JavaScript 和 MySQL。當你能夠更好地處理這些語言時,就是重新學習 JavaScript 的時機了。JavaScript 並不是 jQuery,你應該合理地學習 JavaScript 來更高效地使用它。
我也打算向你推薦學習面向對象的 PHP,它可以節省時間,並且在代碼規模更大時會變得更好。對於類似 C# 和 Java 的語言,在你了解 OOP 之後,它們也更易於理解。
通過了解包管理器、構建腳本、CoffeeScript、LESS、SASS、YAML 、腳本引擎和其它強大的工具來擴展你的知識面。我強烈向你推薦看一看其它框架,尤其是 Laravel。
當你使用它們出色完成任務時,學習 Ruby、RoR、Android、iPhone 和 Windows Phone 應用開發如何?你可能會認為這毫無意義,因為它們在你的舒適區和工作所需范圍之外,但是這就是它們的意義。每種語言都有一些要學習的實用的東西,以及從沒碰到的新知識。所有 PHP 頂級開發者都懂得很多其它編程語言,這並非偶然。
③ PHP的優缺點是什麼
HP應該算是現在大中小非專業網站企業會優先使用的網站建設編程語言,相對於ASP和JSP來說,PHP在在很多方面更適合個人以及小型企業做開發,這主要是因為PHP本身獨特的優勢導致的,那麼下面小編就來為大家盤點PHP得到眾多企業支持的原因。
PHP的優勢包括:
1、開放源代碼
由於PHP開放源代碼,因此基本上可以在網路上找到適合自己的源代碼。
2、免費性
和其它技術相比,PHP本身免費,並且也是開源代碼。
3、快捷性
PHP程序開發快,運行快,技術本身學習快。由於PHP可以被嵌入於HTML語言,新詞相對於其他語言來說編輯簡單,實用性強,更適合初學者。
4、跨平台性強
由於PHP是運行在伺服器端的腳本,因此可以在多種平台上得到應用,包括了UNIX、LINUX、WINDOWS、Mac OS等系統。
5、效率高
PHP由於消耗相當少的系統資源,因此工作效率更高。
6、圖像處理
一般來說,PHP動態創建圖像,而且目前PHP圖像處理默認使用GD2。因此也可以配置為使用image magick進行圖像處理。
7、面向對象
在PHP4,PHP5 中,面向對象方面都做出了很大的改進,因此PHP完全可以用來開發大型商業程序。
8、專業專注
PHP同為類C語言,而且更重要的就是PHP以支持腳本語言為主。
上面介紹的八點內容就是關於PHP被廣大企業使用的優勢,其實PHP相對於其它幾種語言來說,更適合初學者學習和使用,因此想要入門的朋友可以多找一些材料來學習。
④ 簡評用PHP開發大型系統的缺點
筆者在過去的四年裡一直致力於PHP應用的開發 PHP確實十分容易編寫 但是PHP也有一些十分嚴重的缺陷
下面筆者會給出自己的理由 為什麼PHP不適合於比小型業余網站更大的網站
對遞歸的不良支持
遞歸是一種函數調用自身的機制 這是一種強大的特性可以把某些復雜的東西變得很簡單 有一個使用遞歸的例子是快速排序(quicksort) 不幸的是 PHP並不擅長遞歸 Zeev 一個PHP開發人員 說道 PHP (Zend)對密集數據使用了棧方式 而不是使用堆方式 也就是說它能容忍的遞歸函數的數量限制和其他語言比起來明顯少 見bug 這是一個很不好的借口 每一個編程語言都應該提供良好的遞歸支持
許多PHP模塊都不是線程安全的
在幾年前 Apache發布了Web伺服器的 版 這個版本支持多線程模式 在這個模式下 軟體一個一部分可以同時運行多個 PHP的發明者說PHP的核心是線程安全的 但是非核心模塊不一定是 但是十次有九次 你想要在PHP腳本中使用這種模塊 但這又使你的腳本不能合適Apache的多線程模式 這也是為什麼PHP小組不推薦在Apache 的多線程模式下運行PHP 不良的多線程模式支持使PHP常被認為是Apache 依然不流行的原因之一
PHP 由於商業原因而不健全
通過使用緩存 PHP的性能可以陡增 %[見基準測試] 那麼為什麼緩存沒有被構建在PHP中呢?因為Zend——PHP的製造者 它在銷售自己的Zend Accelerator 所以當然 他們不想拋棄自己的商業產品這塊肥肉
但是有另一個可選擇的 APC (Zend後來推出Zend Optimizer 免費的加速器——譯者)
沒有命名空間
設想某個人製作了一個PHP模塊用來閱讀文件 模塊中一個函數叫做read 然後另一個人的模塊可以讀取網頁的 同樣包含一個函數read 然後我們就無法同時使用這兩個模塊了 因為PHP不知道你要用哪個函數
但是有一個很簡單的解決方法 那就是命名空間 曾經有人建議PHP 加入這個特性 但不幸得是他沒有這么做 現在 沒有命名空間 每個函數都必須加上模塊名作為前綴 來避免名稱沖突 這導致了函數名恐怖得長 例如xsl_xsltprocessor_transform_to_xml讓代碼難於書寫和理解
不標準的日期格式字元
很多敏敏程序員對 日期格式字元 都很熟悉 它是從UNIX和氏握C語言中來的 其他一些編程語言採用了這個標准 但是很奇怪的 PHP有它自己的一套完全不兼容的日期格式字元 在C中 %j 表示一年中的當天 在PHP中他表示一個月中的當天 然而使事情更混亂的是 Smarty (一個很流行的PHP模版引擎)的 strftime 函數和 date_format 函數 卻使用了C/UNIX的格式化字元
混亂的許可證
你也許認為PHP是免費的 所有的在手冊中提到的PHP模塊也是免費的 錯了!例如 如果你想在PHP中生成PDF文件 你會在手冊中發現兩個模塊 PDF 和 ClibPDF 但是這兩個都是有商業許可證的 所以 你所使用的每個模塊 你都要確保你同意他的許可證
不一致的函數命名規則
有些函數名稱是有多個單片語成的 一般有三種單詞殲拿慶組合的習慣
直接拼接 getnumberoffiles 用下劃線分開 get_number_of_files 駱駝法則 getNumberOfFiles 大部分語言選擇其中一中 但是PHP都用到了
例如 你想要把一些特殊字元轉換成HTML實體 你會使用函數entities (直接拼接單詞) 如果你要使用相反的功能 你要用到它的小弟弟_entity_decode 由於某些特殊的原因 這個函數名是由下劃線分隔單詞 怎麼能這樣呢?你知道有一個函數叫strpad 或者他是str_pad?每次你都要查看一下到底這個符號是什麼或者直接等他出現一個錯誤 函數是不分大小寫的 所以對於PHP來說rawurldecode 和RawUrlDecode之間沒有什麼區別 這也很糟糕 因為兩個都使用到了同時他們看上去還不一樣 混淆了閱讀者
魔法引用的地獄
魔法引用(Magic quote)可以保護PHP腳本免受SQL注入攻擊 這很好 但是出於某些原因 你可以在php ini中關閉這個配置 所以你如果要寫出一個有彈性的腳本 你總要檢查魔法引用是開啟還是關閉 這樣一個 特性 應該讓編程更簡單 而事實上變得更復雜了
缺少標准框架
一個成長中的網站沒有一個整體框架 最終會變成維護的噩夢 一個框架可以讓很多工作變得簡單 現在最流行的框架模型時MVC 模型 在其中表現層 業務邏輯和資料庫訪問都分離開了
很多PHP網站不使用MVC 模型 他們甚至沒有一個框架 甚至現在有一些PHP框架同時你都可以自己寫一個 關於PHP的文章和手冊沒有提高框架的一個字 同時JSP 開發人員使用像Struts的框架 ASP開發人員使用 Net 看起來好像這些概念都廣泛被PHP開發人員所了解 這就說明了PHP實際上到底是多專業
總結
什麼問題?
對於非常小的項目 它可以是一個十分符合人意的編程語言 但是對於較大的和更為復雜的項目 PHP就顯出他的薄弱了 當你不斷地摸索之後 你會發現筆者提到的某些問題的解決方案 所以 當解決方案已知之後 為什麼不能修正他呢?另外為什麼這些修補不在手冊中提到呢?
一個開源的語言十分流行是一件好事 但不幸得是 它不是一個偉大的語言 筆者希望所有的問題能有一天得到解決(也許在PHP ?) 然後我們就將擁有一個開源語言 他既開源 又好用
lishixin/Article/program/PHP/201311/21478
⑤ PHP7會毀了PHP嗎
我覺得題主說的「毀掉」的意思可能是是毀掉PHP超低的入門門檻。感覺越寫越像Java。然而不可避免的,要接受改變。在ES6剛出的時候也有很多人說ES6毀了JavaScript.原型繼承的寫法多麼多麼好。class寫法多麼多麼糟。時間證明,ES6標准正在快速被實現。我相信,PHP正在越變越好
關於嚴格模式:
從目前來看我覺得新項目用PHP的話,還是開了嚴格模式比較好。因為7.1會加上JIT,性能會提升更多。不給返回值類型JIT不好做啊。對於新手來說,不開嚴格模式學習也不會有太大的問題。
總之,我覺得PHP7是個好事。我就等3號發布正式版升級了~話說什麼時候能把那些語法整理一下啊,都二十年了,咱函數名調整一下吧。要不然就被黑一輩子了 T_T
⑥ asp和php網站程序都有什麼缺點和優點`
(2)把腳本語言直接嵌入HTML文檔中,不需要編譯和連接就可以直接解釋運行。(3)利用ADO組件輕松存取資料庫
。有人說不要試圖開發沒有資料庫支持的網路項目
,而ASP存取資料庫非常容易,沒有CGI難學。(4)
面向對象編程
,可擴展ActiveX Server組件,從理論上說,可以實現任何功能。(5)不存在瀏覽器兼容的問題,由於ASP程序是在伺服器端運行的,當客戶端瀏覽器瀏覽ASP網頁時,伺服器會將該網頁文件重新解釋一遍,並將生成的標准HTML文件發送給客戶端瀏覽器,因為送出的是標準的HTML文件,當然不會存在瀏覽器兼容的問題了。(6)可以隱藏程序代碼,在客戶端僅可看到由ASP輸出的動態的HTML文件,可以保護你的勞動成果。1。2 ASP的缺點(1)運行速度比起HTML程序較慢,這是因為每當客戶端打開一個ASP網頁時,伺服器都須將該ASP程序從頭到尾重讀一遍,並加以編譯執行
,最後再送出標準的HTML格式文件給客戶端,從而影響了運行速度。不過,由於伺服器硬體技術的更新和網路速度的提高,速度上的影響是很小的,特別是當同時上網的人數較少時,這種影響更可以忽略不計了。(2)有的
網路操作系統
不支持ASP,這樣用ASP開發Web程序一般來說最好選用Windows系列的操作系統
。2。1 PHP的優點(1)首先它是免費的,對於許多要考慮運行成本的商業網站來說比較重要。(2)開放源碼,所有的源碼和文檔都可以免費復制,編譯和傳播。正因為它是開放的,所以才可能有很多愛好者不斷地發展它,使它具有旺盛的活力。(3)多平台支持,可以運行在UNIX,Linux或Windows操作系統下。(4)由於在伺服器商運行,是交PHP文件解釋成標準的HTML文檔發送過去,因此也不受客戶端瀏覽器的限制。(5)效率高,同ASP相比,PHP佔用較少的系統資源,招待速度比較快。2。2 PHP的缺點(1)因為沒有大公司的支持,可能前途不如ASP,JSP等輝煌。(2)運行環境安裝相對比較復雜。
⑦ Php7有哪些新特性
PHP 7.4 的主要特性包括以下幾個,
短閉包函數(short closure) 預載入提交性能 屬性類型限定 Improved type variance(不會翻譯) 三元運算簡寫 數組展開運算 新增類的魔術方法:serialization 數字分隔符 運算優先順序 允許在__toString中拋出異常 支持反射引用 新增位元組分割函數 移除php短標簽 棄用左關聯運算符 不再向後兼容的變更 短閉包函數短閉包函數可以減少冗餘代碼:
array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) => $user->id, $users)需要注意幾點:
短閉包可以直接訪問閉包函數外面的變數,所以不需要再寫?use?關鍵詞 以fn關鍵詞開始 $this?可以像普通的閉包一樣使用 短閉包只有一行代碼,僅僅做返回聲明使用,不允許使用return?關鍵詞還可以使用更嚴格類型的方式
$ids = array_map(fn(User $user): int => $user->id, $user); 預載入PHP預載入可以極大的提高性能
優點:在PHP 7.4以前,如果你使用了框架來開發,每次請求文件就必須載入和重新編譯。預載入在框架啟動時在內存中載入文件,而且在後續請求中永久有效。
缺點:性能的提升會在其他方面花費很大的代價,每次預載入的文件發生改變時,框架需要重新啟動。
屬性類型限定 class A { public string $name; public Foo $foo; }不得不說,PHP越來越接近Java等強類型語言
Improved type variance協變返回類型:
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }依賴(是不是很熟悉):
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 簡寫三元運算符在目前> PHP 7以後的寫法:
$data['date'] = $data['date'] ?? new DateTime(); 在PHP 7.4你可以這樣寫: $data['date'] ??= new DateTime(); 數組展開運算合並數組到另一個數組中,返回一維數組
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]注意? :只對數字索引有效
新增類的魔術方法RFC添加了兩個新的魔術方法__serialize和__unserialize
數字分隔符允許使用下劃線更直觀的分隔數值
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 運算優先順序PHP 7.4之前,如果你這樣寫:
echo "sum: " . $a + $b; PHP會解析為: echo ("sum: " . $a) + $b; PHP 8將會解析為: echo "sum :" . ($a + $b); __toString中拋出異常支持反射引用PHP 7.4將會新增ReflectionReference?類
移除php短標簽<?將會在PHP 8中移除,<?=會繼續保留
棄用左關聯運算符PHP遺留了一些奇怪的怪癖,比如
1 ? 2 : 3 ? 4 : 5; // 將會在 PHP 7.4 中廢棄,在 PHP 8中會拋出編譯錯誤 (1 ? 2 : 3) ? 4 : 5; // 正確 不再向後兼容的變更 棄用在沒有父類的情況下調用parent:: 調用var_mp列印DateTime和DateTimeImmutableshi』實例,將不再保留對象上的可訪問屬性 openssl_random_pseudo_bytes?會在調用錯誤時拋出異常 序列化PDO和PDOStatement?實例將會生成一個Exception而不是PDOException異常 調用get_object_vars()列印ArrayObject?實例將會返回ArrayObject?自己的屬性,而不是被包裹的數組或對象的值,數組強制轉換不受影響