PHP 開發迷思 (三) – PHP 很糟糕?
一直以來,很多 Web 開發者認為 PHP 不過只是個 Scripting Language ,比不上 JSP 或是 ASP.Net 等重量級的專業開發環境。
所以你可以看到他們寫的 PHP 幾乎都是把 PHP 程式碼和 HTML 混雜在一起,或是跟著書本按表操課,因為他們覺得這種簡單的工作只要能夠交差了事就行了。
對他們來說: PHP 會用就好啦!真正專業的技術知識應該要從 Java 、 C# 或是其他正統的語言中學習!
雖然我不意外他們有這樣的想法,但我更希望他們能重新認識 PHP !
PHP 想做什麼?
其實一開始, PHP 的確只是一個 Rasmus Lerdorf (PHP 之父) 把 C 語言函式包裝起來的 Scripting Language ,它的目的很單純地是想讓 CGI 變得很簡單。所以嚴格來說, PHP 一開始並不能稱得上是一個語言,它只是一個很像 C + Perl 的 Script Wrapper 。
然而隨著版本的不斷地演進, PHP 也不再是只能處理 Web CGI 了;它還加入多種執行模式,在應用上變得更加地豐富:
但也因為功能的多樣化,使得原來單純處理 Web 文字的 PHP 語法顯得捉襟見肘。因此,加入更現代化的語法成為 PHP 勢在必行的目標之一。
註:關於 PHP 詳盡的歷史請參考 Wiki 上的說明,這裡我就不再複製貼上囉。
語法的加強
然而 PHP 有著先天上的語法限制及函式名稱的不統一,使得它招來了許多嫌它醜陋的噓聲。還有 PHP 一開始也沒有想過要變成一個真正的語言,而是在 Web 開發上能夠易學易用;使得它無法像 Python 、 Ruby 一生下來就擁有優雅的語法,也沒有 Java 或 C# 一樣嚴謹的架構。
為了急起直追, PHP 在每次重大的版本更新後,便不斷加入新的語言特性;現在的 PHP 可以說是揉合了 Perl 、 C 、 Java 、 JavaScript 的一種語言:
- Perl: 最大的特色就是以 $ 號為變數開頭,使得「變數的變數」這樣的寫法在 PHP 簡單又容易。
- C: PHP 的敘述語法採用 C style ,這是大多數程式開發者習慣的語法。
- Java: PHP 5 散發了濃濃的咖啡味,它的物件導向特性有大部份參考自 Java 的類別與介面。
- JavaScript: 在 PHP 5.3 之後,也融入了 Closure 、 Anonymous Function 等 (請參考 PHP 5.3 New features ) 。
註:當然這麼多特色的改進之下, PHP 似乎成了四不像,所以在程式語言的狂熱者看來, PHP 似乎真的醜了點。
不過 PHP 到底是為什麼要把這麼多特性加進來呢?
邁向更先進更穩固的開發模式
隨著 Web 的多元化,現代的語言也必須跟著把自己在 Web 開發上的功能變得更強大;所以在 PHP 改版的同時,也不斷地加強它的適應性。像是 Ajax 與 JSON 開始嶄露頭角的時候, PHP 5.2 就馬上把 json_encode() 等相關的方法放到核心裡。
而軟體工程也漸漸被引入到 PHP 之中,使它擁有了 Design Pattern 、 Unit Test (SimpleTest 、 PHPUnit)、 Refactoring 等觀念與技術;另外 MVC Framework 、 ORM 等加速開發效率的工具也大量地被創建出來,讓開發者能更快速且更有系統地完成他們的工作。
這些技術都需要有更高階的語言特性才有辦法進行,也因為如此使得 PHP 不得不做出改變。例如:
- 更多元的物件導向特性: Reflection 、 SPL 等。
- 更強大的安全機制: Data Filtering 及其他相關安全議題的改良等。
- 更抽象的資料處理: PDO 等。
- 更便利的文件格式操作: JSON 、 XML Parser 、 DOM 等。
而且 PHP 還有更多的 Extensions 在背後支持著它,這些全都是為了讓開發者能建立強大而穩固的程式!
結論
PHP 與傳統的 ASP 曾經佔有 Web 開發上非常重要的一席之地,因為它們的出發點與開發過程都非常相似;然而在 ASP 已經式微的現在, PHP 卻依然毅立不搖。因為 PHP 不但保留了原有簡單易學的特性,還隨著時代不斷地改變它自己,朝著更好的方向演進。
當然,或許 PHP 的語法結構不如其他語言來得優美,也或許 PHP 的商業資源不比其他語言來得豐富;但是 PHP 真的不再是往日的吳下阿蒙,它在 Web 開發上的強大與效率就連 Yahoo! 都欣賞,選擇 PHP 來開發自己旗下的網站服務。
很多不瞭解 PHP 的開發者容易忽略它在各種應用上的強大,而單純只把它當做是和 HTML 混雜撰寫的 Script 語言。希望本文能做為一個楔子,讓大家能重新瞭解 PHP !
我是从asper转到phper的,原来用asp时,可以顺便用vb做一写日常小工具来用(自己用or给朋友用),现在php在gui上的确很差,虽然有gtk,但和vb比起来,差距还是蛮大的,由于经常需要帮朋友做些日常的小软件,用php后,想让别人使用还要在终端机上配置复杂的环境(也许php天生就不适合单机而应该采用云服务?可是为了管理一些小事情要链接网络的话也不值得,那不如直接去用在线的服务)总之对浏览器里运行的东西超没爱,也许air的出现是个机会?air的学习成本也蛮大的。。谁知道。我觉得目前的趋势来说,做gui我是不看好啦,代码都不能编译,用php做gui等于拿源代码直接送人。。。。我想我还是安安心心用php做web和b/s的服务端吧,做桌面应用的话在考虑学习第二门语言,VS是不会考虑啦,java当年有次选择的机会,我没选择,现在也不会再返回去选择,而且找点新东西更有意思吧,也许as+air组合不错。