雖然PHP是Web應用開發中最廣泛使用的環境,但它還是一度被認為無緣企業級開發。
Q:企業軟件的一個關鍵元素就是互操作性,它可以讓軟件與其他平台交換信息。大家都認為PHP在這方面表現欠佳,因為它的WS-*支持相對來說比較新且功能較少,成熟度不高。關於這點你們是怎麼考慮的?它會不會有所改變?
Zeev:我覺得相比WS-*而言,互操作性涉及的要更加多些。事實上,我們只看到了很少的基於SOAP的Web服務請求,而更多的則來自於其他標准,這主要是因為部署SOAP的過程較為復雜。PHP極好地支持了互操作,並且為此提供了很多不同的接口(REST,優秀的XML支持,SOAP,以及為web服務提供的 ZF組件等等)。據說PHP從2004年開始就為SOAP提供了非常好的基礎支持,從2006年開始就通過Axis2擴展為WS-*提供了廣泛的支持。我只能說我還從沒有碰到過用戶抱怨缺乏互操作性的情況,如果真的有,那也一定是贊美吧。
Rob:我覺得這只是部分人的觀點。PHP源於其簡單性。它是一門只需必要的復雜度,就能“解決web問題”的語言。因此PHP程序員會更多的選擇REST 而不是SOAP。傳統的企業軟件正逐步向位於中間的PHP靠攏。比方說,IBM的許多企業級軟件產品在去年都提供了RESTful交互支持,包括Atom 發布協議,這樣的話就多了一個選擇。在該用WS-*的地方使用它,而在開發的簡單性和速度至關重要時,應使用REST。我們也饒有興趣的看到了PHP被用來直接加強企業連通性。IBM的Message Broker可以當作一個“萬能轉換器”,它能夠將一個東西連接到另外一個東西,而現在它的消息轉化流中也提供了對PHP計算節點的支持。所以現在是可以在企業軟件內部中使用PHP語言簡單而又強大的語法和語句的。我們最近為IBM的CISC事務處理器發布了一個SupportPac,用以支持PHP語言。CISC正如軟件一樣,具有“企業級“的性質。它運行於主機上,可以由一些像銀行,政府和醫療保健部門的組織來使用,用以處理一些最重要的可能影響到日常生活的事務。
Derick:我覺得這裡沒什麼太大問題。PHP已經為所有的WS技術如SOAP,XML-RPC和JSON提供了支持。
Q:過去的幾年裡,將腳本語言移植到JVM中並以利用它豐富的監控,安全等功能已經成為了一種趨勢。這對於PHP開發而言並不陌生,因為現實世界中存在好些個運行在JVM中的PHP應用。制造商們對於提升性能的話題各抒己見。你們是怎麼看待這種趨勢的?
Zeev:我們在.Net中也看到了類似的趨勢,但是這些腳本語言並沒有很遠地脫離原始的實現。我想對於JVM上的PHP也是同樣的道理。事實上我們可以看到原生實現的PHP相比綜合改造後的PHP所擁有的性能優勢——尤其是對內存的需要以及在現實世界中長期運行的表現。盡管如此,標准實現最大的優勢是在於它所擁有的強大社區支持(包括在代碼貢獻和使用上),這是其他實現所缺少的一個東西。
Rob:它的一切都令人如此興奮,我相信它會有很好的未來。在數以千計的已經被實現的語言中,只有少量語言在自然選擇過程中幸存下來,原因是它們特別適合於某個用途。因此開發者改進創新某種語言的實現是一個很自然的事情。如果我們看看Ruby社區就會發現,這門語言的成功歸因於至少半打以上的實現,還有這些實現中的共享測試和性能調整,它們幫助明確了語言的規范,而相互間”最快Ruby“頭銜的競爭也功不可沒。我想我們正在PHP上見證同樣的事情發生。我們已經看到了PHP實現間協作所帶來的巨大好處,例如在過去兩年裡由社區產生了大量的全新測試用例以及為改善某些API而作的努力,我相信這種現象在未來會持續下去。我現在正工作於PHP在JVM上的一個實現,它已經用在了IBM的ProjectZero孵化器(incubator )中,WebSphere sMush產品,以及我前面提到的CISC PHP SupportPac和MessageBroker計算節點中。我認為對於某些類型的問題,在JVM上運行PHP會非常有意義。我們看到我們的合作伙伴和客戶正在使用它來耦合現有的基於Java的系統,這樣做他們可以在輕松重用Java庫和API的同時,享受PHP所帶來的便捷。
Derick:盡管性能方面“可能”會有所提高,但是可擴展性卻始終是個問題。PHP的整體思想是在無共享架構的情況下輕松實現可擴展性。在JVM上跑PHP會移除掉它的無共享架構。不幸的是PHP社區中只有一個叫做PHP-on-JVM的項目在盡可能的貢獻著測試用例。
Q:從PHP 4到PHP 5的升級不是一個簡單的遷移過程。關於那些猶豫是否對即將發布的PHP 6進行投資的公司,你們想說些什麼?
Zeev: 實際上我並不同意關於4->5遷移是個非常困難過程的說法。整個過程並沒有太多的兼容性破壞問題,而只是相對簡單地修補應用程序。事實上想要利用新的功能,多花一點工作是在所難免的,也是意料之中的。在6的版本中我們實際上更多的考慮了兼容性破壞問題——目前這個問題在6中要比在5中更具實質性。這就是我們需要花時間去做的事情。
Rob:我認為PHP5在今後很長一段時間都會存在。即將發布的5.3版本已經盡可能的設計為無痛升級,且增加了原本定在PHP6.0中的幾乎全部的功能,只差移除掉一些不用的功能和增加PHP 6.0中的unicode了。我非常渴望看到unicode版本的的PHP,因為它可以讓基於PHP的JVM具有更加直接的兼容性,之所以更加直接是因為 JVM原生地采用了unicode來表示字符串,但是我懷疑采納過程在PHP 5和PHP 6中都將會非常緩慢且持續許多年。
Derick:雖然大家對此總是懷疑,但是我們會努力減少這些問題,通過引入向前兼容的功能來轉移到PHP 6。如果大家能夠向我們反饋一下自己在當前開發版本中碰到的問題的話,那麼可以幫助我們將遷移過程變得更加簡單。
Q:在所有的建立的語言中,社區中的人們都推動增加了許多高級的功能。而另一方面PHP一直被認為易學的功能較少。你們認為這種情況需要改變嗎?
Zeev:我絕對不認為它應該改變,因為它是PHP成功的一個關鍵因素。希伯來語中有句諺語大致這麼說“給的越多,拿的越多”,我堅信這句話對於 PHP是適用的,至少在語言結構與語法上如此。通過使用擴展和框架,PHP可以無止境的擴展,在我來看,這些擴展和框架正是PHP最佳和最有趣的“最後前沿”。我覺得完全使用PHP的大型復雜網站(Facebook,Yahoo,Flickr),完全基於PHP的復雜現有應用(SugarCRM,OpenPro,CMS's),以及公司網站或內部系統依賴於PHP的企業證明了這樣一個事實:PHP的功能集已經成熟,並且我們應該朝著這個方向走下去。
Rob:在我們著手為IBM的腳本產品WebSphere sSmash選擇腳本語言時,就因為PHP如此廣泛的使用面而特別選擇了它。我們希望能夠讓數以百萬的PHP程序員們能與企業或者企業軟件緊密聯系在一起,並且我們希望支持一種能夠讓新人程序員快速上手的語言。PHP的強大在於它的簡單性。一門語言如果不想滅亡的話就一定需要不斷的演變。如果PHP 5沒有支持面向對象編程的話,肯定會喪失很多吸引力。伴隨著PHP 5.3的發布,PHP肯定可以在這些新的特性上潛在的增加其復雜性。我想未來更多的工作是去了解怎樣使用它們和在此之上形成的語句。鑒於新版本被采納的滯後性,因此在大部分主流應用程序轉移到使用5.3功能之前,還需要等上若干年,我想在這段時間裡PHP程序員將會用大量實例來掌握這些新功能,並將它們用在簡化常見的編程任務上。
Derick:不,它不需要改變,這兩類開發人員都存在。增加新功能並不一定需要提高入門的門檻。
Q:PHP作為一門語言,在這些年裡一直追隨優秀的范型而演變,並從一個簡單的預處理器演變成了一個強大的OO語言。隨著函數式編程風格嶄露頭角,你們覺得這種這種范式是否會走進未來PHP的世界?
Zeev:不會。PHP仍然支持過程式開發,並且不太可能會消失;我們早在啟動PHP(PHP 3)中就增加了OO的支持,雖然它現在跨越到了PHP 5中。lambda大概是最接近函數式范式的東西了,而這正是我們需要完成的。這也映襯了我前面回答的一個問題——我們不想要一個一勞永逸的語言,只是想要一個能夠完成工作的簡單語言。
Rob:這在一定程度上已經發生了。PHP 5.3中閉包的概念就是來源於函數式編程的世界裡。PHP社區混雜了大量經過“經典訓練”的計算機科學專業人員以及一些業余自我訓練的程序員。看到這個多樣的社區中閉包的誕生和常用語句的演化其實是一件很有趣的事。我相信我們最終會完成一套被廣泛接受的模式和語句,它可以很優雅的解決web開發中的常見問題,而程序員在使用時都不會想到其實這一切都源於函數式編程。
Derick:我不確定,我認為它不會特別合適。但是如果它對PHP應用程序有意義的話,也許可以找到進入PHP的出路。PHP在集成其他語言中有趣和有用的理念方面一直做得很優秀。
你是怎麼認為的呢,選擇PHP是企業的明智之舉嗎?