摘要:但我還是使用它開發(fā)了很多軟件。那么問(wèn)題就很明顯了為什么今天還在使用除了個(gè)人理想主義的偏好以外,還有很多理由。為什么使用而不是也許和比較的最重要的語(yǔ)言是。為什么選擇而不是你已有專業(yè)知識(shí)或者在使用庫(kù)。
我們來(lái)開門見(jiàn)山地說(shuō)。? PHP 是一門奇葩的語(yǔ)言。它既不快,語(yǔ)法又不漂亮。還沒(méi)有遵守良好的軟件開發(fā)實(shí)踐。?但我還是使用它開發(fā)了很多軟件。 那么問(wèn)題就很明顯了?為什么今天還在使用 PHP ?
除了個(gè)人理想主義的偏好以外,還有很多理由。這才是我們要討論的范圍。為什么選 PHP 作為我的 Web 開發(fā)語(yǔ)言?
PHP 是什么?「PHP 代表什么意思?」 或者這么問(wèn),「PHP 是什么?」 PHP 是一門編寫 web 頁(yè)面的語(yǔ)言,底層使用 C 語(yǔ)言實(shí)現(xiàn),使用 HTML 的標(biāo)簽語(yǔ)法包裹代碼。PHP 通常跑在服務(wù)端,與 web 服務(wù)器配合工作,負(fù)責(zé)把 HTML 加工完返回給訪問(wèn)者。
PHP 最初的意思是 「 Personal Home Page 」。因?yàn)檫@完全限制了使用該語(yǔ)言進(jìn)行一般使用的意義和可取性,所以該語(yǔ)言現(xiàn)在代表「 PHP:Hypertext Preprocessor」。這種寫法被稱為遞歸縮寫(一種全稱中引用自己的縮寫)。 極客們都喜歡用這種名字。
PHP 能做什么?PHP 能用來(lái)做什么?通常來(lái)說(shuō) PHP 能做任何你想在 web 服務(wù)器上實(shí)現(xiàn)的東西。 比如說(shuō)做一個(gè)博客。實(shí)現(xiàn)一個(gè) SAAS 應(yīng)用也完全不在話下。寫一個(gè)臨時(shí)處理數(shù)據(jù)的腳本也是得心應(yīng)手。又或者寫了一個(gè)復(fù)雜的腳本,某一天突然變成了一門成功的軟件業(yè)務(wù)?過(guò)去也經(jīng)常發(fā)生。
如果你不相信我,可以看下 PHP 官網(wǎng)列出使用場(chǎng)景:
服務(wù)端腳本
命令行腳本
編寫桌面應(yīng)用
我不太鼓勵(lì)最后一項(xiàng),但它確實(shí)可行。但是前兩項(xiàng)確實(shí)是很棒的理由 。
這就引出了一個(gè)重要且無(wú)法回避的事實(shí)...
PHP 無(wú)所不在了解和喜愛(ài) PHP 的理由有非常多,可能最給力和有效的理由是:它可以在網(wǎng)絡(luò)的任何地方使用和運(yùn)行。如果你仔細(xì)尋找,你買到每月最低3美元的托管賬戶可能可以運(yùn)行 Python 或 Ruby 的 Web 應(yīng)用程序。但它肯定能運(yùn)行 PHP 。這意味著無(wú)論什么時(shí)候你都可以依賴 PHP 。
因?yàn)?PHP 可以運(yùn)行在任何地方,并且它容易上手,很多非常受歡迎的軟件都是用 PHP 寫的。 WordPress 是對(duì)我影響最大和最熟悉的例子,除此之外,像 Joomla , Drupal , Magento , ExpressionEngine , vBulletin (是的,它仍然存在), MediaWiki 等這些工具,它們都在服務(wù)器上運(yùn)行 PHP 。
不僅如此,PHP 應(yīng)用框架更是多得數(shù)不勝數(shù), 比如:Symfony , Zend , Laravel , Aura , CakePHP , Yii 甚至是古老的 CodeIgnitor 框架。當(dāng)然你可以為其它任何一門語(yǔ)言制作一些長(zhǎng)度相當(dāng)?shù)?Web 框架列表。比如常用的 Web 語(yǔ)言像 Python , Ruby ,或 Node/JavaScript ,你甚至可以積累一個(gè)數(shù)字競(jìng)爭(zhēng)列表來(lái)跟 PHP 比較。但運(yùn)行 PHP 的網(wǎng)站數(shù)量龐大到無(wú)法估計(jì)。
WordPress 自豪地聲稱在互聯(lián)網(wǎng)上有 30% 的用戶量。 你甚至不需要相信這個(gè)說(shuō)法就會(huì)意識(shí)到許多的互聯(lián)網(wǎng)應(yīng)用必須使用 PHP 即使這個(gè)說(shuō)法甚至可以想象成是真的。
PHP 的優(yōu)點(diǎn) 動(dòng)態(tài)化特點(diǎn)PHP 和 HTML 可以非常融洽地工作在一起。將 file.html?修改為?file.php ,即可在?? 和? ?> 標(biāo)簽里編寫 PHP 代碼,并且大部分的 Web 服務(wù)器默認(rèn)配置就是可以直接運(yùn)行 PHP 腳本。正因?yàn)槠溟T檻非常低,不需要懂太多編程知識(shí)的菜鳥程序員也可以直接上手操作,以至于產(chǎn)生了很多低品質(zhì)的代碼。
因?yàn)槠湟讓W(xué)性,大量的菜鳥程序員涌入,暴露出來(lái)另一個(gè) PHP 一直被人詬病的問(wèn)題:PHP 并沒(méi)有對(duì)自己是最好的 Web 服務(wù)器端語(yǔ)言有清晰的遠(yuǎn)景,當(dāng)然也沒(méi)為此做過(guò)太好的設(shè)計(jì)。導(dǎo)致走向了另一個(gè)結(jié)果,來(lái)自全球各地松散的合作,大雜燴般地貢獻(xiàn)代碼和想法,難以避免地,有一些壞的想法滲入其中。
擁有強(qiáng)大的面向?qū)ο蟀芾硎乾F(xiàn)在 PHP 中的一種標(biāo)準(zhǔn)Composer 是 PHP 的加分項(xiàng)。
在 PHP 的開發(fā)中,經(jīng)常會(huì)有一些奇葩的東西被發(fā)布出來(lái)。最著名的栗子當(dāng)屬 PHP 5.3 (廣泛的被視為 PHP 的第一個(gè)現(xiàn)代化版本 )中引入?goto? 聲明。
類似的問(wèn)題是在 PHP 成長(zhǎng)過(guò)程中產(chǎn)生:面向?qū)ο笞畛跏亲鳛橐粋€(gè)有缺陷和有限制的概念來(lái)實(shí)現(xiàn)的,標(biāo)準(zhǔn)庫(kù)中充滿了不一致的名稱和參數(shù)排序,并且(舉個(gè)近來(lái)備受關(guān)注的栗子)在 PHP 5.3 中 :: 操作符無(wú)法識(shí)別時(shí),解析器會(huì)拋出可讀性很差的報(bào)錯(cuò)信息:語(yǔ)法錯(cuò)誤?(T_PAAMAYIM_NEKUDOTAYIM) ,如果不看文檔,你能用英文來(lái)理解這個(gè) T_PAAMAYIM_NEKUDOTAYIM 標(biāo)示的意思嗎?
但是現(xiàn)在,PHP 已經(jīng)完全支持 OOP。很少語(yǔ)言具有像 PHP 這樣類似 Java 的 OOP 實(shí)現(xiàn)。另外,與 Java不同的是,PHP 有一個(gè)多帶帶的并擁有廣泛支持的包管理器,叫作 Composer。它非常的好用,并且不容忽視的一點(diǎn)是它可以方便地引用優(yōu)質(zhì)且維護(hù)良好的庫(kù),具有很高的易用性。
PHP 的高速發(fā)展通過(guò)這些事實(shí)發(fā)現(xiàn), PHP 正在以有趣的方式發(fā)展著。它正逐漸成為像java一樣功能齊全的面向?qū)ο笳Z(yǔ)言(更好或更糟糕),正在為函數(shù)式編程提供簡(jiǎn)單的抽象,這可以說(shuō)是當(dāng)前的熱點(diǎn)。并且,正在發(fā)展一套非常棒的工具, PHP 喜歡?Composer , 并有充分的理由 --- ?因?yàn)樗谝恍┐笮烷_源項(xiàng)目的協(xié)同工作上做出了值得贊揚(yáng)的努力.
當(dāng)然,我們不應(yīng)該忘記當(dāng)前的熱點(diǎn):PHP 在 PHP7 系列版本中的發(fā)展取得了速度上的提升。這被廣泛認(rèn)為是由 Facbook 出現(xiàn)的 HHVM?引起的,在短時(shí)間內(nèi),存在 HHVM 的發(fā)展速度會(huì)破壞 PHP 社區(qū)的風(fēng)險(xiǎn),但事實(shí)并非如此,相反,PHP 的發(fā)展速度快得多,以至于人們幾乎忘記了 HHVM 的存在。
PHP 有一個(gè)巨大的社區(qū);它對(duì)新手友好。如果你決定使用什么很酷的新技術(shù),我認(rèn)為經(jīng)常得到很少關(guān)注的是與語(yǔ)言達(dá)成協(xié)議的方式。學(xué)習(xí)PHP是什么感覺(jué)? PHP教程很好找,質(zhì)量通常也很好。
PHP流行的一個(gè)缺點(diǎn)是,你會(huì)從那些對(duì)工具不夠了解的人那里找到一些不那么好的教學(xué)。或者從某人那里學(xué)到的“最佳實(shí)踐”是十年前的。但總的來(lái)說(shuō),這很少見(jiàn),我不認(rèn)為它應(yīng)該讓你灰心。或者突然發(fā)現(xiàn)自己使用了幾個(gè)月的最佳實(shí)踐并不是最好的是很少見(jiàn)的,也不是一個(gè)大問(wèn)題。
PHP 與其他語(yǔ)言的比較接下來(lái)我們要對(duì)比下 PHP 與其他的語(yǔ)言,這些語(yǔ)言需滿足以下要求:
開源:意味著你可以自由、免費(fèi)地使用或者查看底層語(yǔ)言或者程序;
應(yīng)用于 Web 開發(fā)領(lǐng)域:不一定是專注于 Web 開發(fā),但是在 Web 開發(fā)中有比較大的應(yīng)用;
高階動(dòng)態(tài)語(yǔ)言:具備動(dòng)態(tài)語(yǔ)言的特性,大部分面向 Web 應(yīng)用的語(yǔ)言兼具此特性;
足夠大的社區(qū):有很多滿足以上條件,但是只是在小范圍使用的語(yǔ)言,我們使用這最后一個(gè)條件將他們過(guò)濾掉。
為什么使用 PHP?而不是 JavaScript?也許和 PHP 比較的最重要的語(yǔ)言是 JavaScript。現(xiàn)代開發(fā)要求每個(gè)項(xiàng)目都至少會(huì)一點(diǎn) JavaScript 來(lái)進(jìn)行客戶端開發(fā)和交互。借助 Node,這使得在服務(wù)器上使用 JS 變得相對(duì)簡(jiǎn)單。在服務(wù)器上和客戶端“同構(gòu)”使用相同的語(yǔ)言非常吸引人。
如同 PHP,JavaScript 是一個(gè)兼容并蓄但有時(shí)丑陋的語(yǔ)言,有很多的瑕疵和“陷阱”,但 JavaScript 在過(guò)去十年變得非常快,所以他的情況是真實(shí)的。為什么選擇 PHP 而不是 JavaScript?你已有專業(yè)知識(shí)或者在 PHP 使用庫(kù)。否則,我認(rèn)為 JavaScript 或許是個(gè)更好的選擇。
PHP 對(duì)比動(dòng)態(tài)服務(wù)器頁(yè)面 (.Net Core)動(dòng)態(tài)服務(wù)器語(yǔ)言起源于一個(gè)用于網(wǎng)友編程的 Microsoft 語(yǔ)言。他和 PHP 非常直接相似。但他運(yùn)行在 Windows 服務(wù)器環(huán)境。這被 ASP.net 取代了。現(xiàn)在已被 ASP.NET Core 取代。后兩者現(xiàn)在是 PHP 一樣的開源語(yǔ)言。而我個(gè)人從沒(méi)有在任何變體中寫過(guò)一點(diǎn) ASP。
如果我使用且更喜歡 Microsoft 服務(wù)器的話,我會(huì)更喜歡 ASP。其他情況,請(qǐng)給我 PHP。兩者社區(qū)的規(guī)模和大小沒(méi)有可比性。
我應(yīng)該使用 Ruby 還是 PHP?Ruby,特別是 Ruby on Rails,在過(guò)去十年前?非常?受歡迎。Ruby 依然是一個(gè)備受喜愛(ài)的語(yǔ)言,這在我看來(lái)他比 PHP 優(yōu)雅。也就是說(shuō),他的社區(qū)較小。同時(shí)我認(rèn)識(shí)到 Ruby 已經(jīng)不再是 "熱門語(yǔ)言"(被 JavaScript 取代了此角色)。Ruby 的優(yōu)雅,并且有足夠多的人擅長(zhǎng)使用,因此我不會(huì)避免他。但招聘已熟悉 Ruby 的人依舊比招聘 PHP 要難。(雖然我認(rèn)為一般的 Ruby 開發(fā)者水平比相同的 PHP 開發(fā)者要高。)
Python vs PHP:誰(shuí)更好一些?最后一種與 PHP 一對(duì)一比較起來(lái)有意義的是 Python 。 Python 的使用場(chǎng)景要更多,相對(duì)于專注于 web 開發(fā)的 PHP 來(lái)說(shuō)(尤其是在數(shù)據(jù)統(tǒng)計(jì)與分析上面)。而且人們普遍都覺(jué)得它是一種更為更穩(wěn)定和優(yōu)雅的語(yǔ)言。
就像 Ruby 和 JavaScript 一樣, Python 在服務(wù)器上運(yùn)行要比 PHP 稍微麻煩一點(diǎn)。但是它是一種非常完美的語(yǔ)言,而且比起 PHP 的使用更具多樣化,我認(rèn)為它是比 PHP 更流行的語(yǔ)言之一,而且在其他方面(例如:各種第三方的庫(kù)、專業(yè)技術(shù)知識(shí)的獲取、招聘求職)都是一樣的。
PHP vs Go 語(yǔ)言?Scala語(yǔ)言?Java語(yǔ)言?等等一開始曾提到過(guò),許多語(yǔ)言在做比較時(shí)或多或少會(huì)有一些相似的地方。這里有很多的語(yǔ)言可以拿來(lái)做對(duì)比,因此簡(jiǎn)單的聊幾個(gè):
java 非常受歡迎,并且效率很高。通常被用來(lái)搭建安卓應(yīng)用程序,桌面應(yīng)用程序,和 web 端應(yīng)用。不過(guò),它不是動(dòng)態(tài)類型的,它有更好的性能保證,但很適合Web 編程。
Go 是 Google 支持的正在發(fā)展的一門新語(yǔ)言。它專注 web 服務(wù)。但是這塊相比 PHP 還是有些不足(更像 C 語(yǔ)言),它的執(zhí)行速度很快,但是社區(qū)相對(duì)有限。
Scala 是一種流行的運(yùn)行在內(nèi)存區(qū)(Java 兼容)的語(yǔ)言,也似乎越來(lái)越受歡迎。它比 PHP 設(shè)計(jì)的更優(yōu)雅,但是除此之外,似乎沒(méi)有更多了。
此外,我覺(jué)得這些分析足夠可以做出選擇了,但是你有更多的選項(xiàng)可以去考量,不過(guò)最后我的替代方案將會(huì)考慮 PHP。
需要按需選擇編程語(yǔ)言有了上面的比較,為什么還要使用 PHP ?上文我已經(jīng)提過(guò)了一些 PHP 里壞的設(shè)計(jì),有一些我經(jīng)常性會(huì)經(jīng)歷,例如在『查找類型的函數(shù)』里,這些函數(shù)needle 和 haystack 順序不一致,在沒(méi)有代碼補(bǔ)全的環(huán)境下,我還是會(huì)掉坑里。
如果你在構(gòu)建一個(gè)全新的 Web 項(xiàng)目,并且此項(xiàng)目不需要與其他系統(tǒng)交互,并且只有你一個(gè)人在工作,你想試試看其他語(yǔ)言,類似 Python 什么的。但是,你需要知道的是,即使是這樣的一個(gè)項(xiàng)目,還是有很多理由讓你選擇 PHP。
任何現(xiàn)代化的語(yǔ)言都可以讓你構(gòu)建一個(gè) Web App。每一門語(yǔ)言都有他們不足之處,例如 PHP 就是這樣的,PHP 要求你清晰地了解其不足之處,然后才能決策是否要在項(xiàng)目里使用它。但是對(duì)于我來(lái)說(shuō),我仍然會(huì)選擇 PHP 來(lái)構(gòu)建我的 Web 項(xiàng)目,就如 Keith Adams 在其?演講里? 提到的:
PHP 的開發(fā)效率真不是一般的高。
如果你有一個(gè) Python 的團(tuán)隊(duì),請(qǐng)使用 Python。如果你有個(gè)合伙人熟悉 Java,請(qǐng)使用 Java 來(lái)編寫你的 SaaS 程序。語(yǔ)言,永遠(yuǎn)都不是最重要的。
文章轉(zhuǎn)自: https://learnku.com/php/t/24576
更多文章:https://learnku.com/laravel/c...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30948.html
摘要:但是,有一件事是肯定的年對(duì)全棧開發(fā)者的需求量很大。有一些方法可以解決這個(gè)問(wèn)題,例如模式,或者你可以這么想,其實(shí)谷歌機(jī)器人在抓取單頁(yè)應(yīng)用程序時(shí)沒(méi)有那么糟糕。谷歌正在這方面努力推進(jìn),但不要指望在年會(huì)看到任何突破。 對(duì)于什么是全棧開發(fā)者并沒(méi)有一個(gè)明確的定義。但是,有一件事是肯定的:2019 年對(duì)全棧開發(fā)者的需求量很大。在本文中,我將向你概述一些趨勢(shì),你可以嘗試根據(jù)這些趨勢(shì)來(lái)確定你可能要投入的...
摘要:但是,有一件事是肯定的年對(duì)全棧開發(fā)者的需求量很大。有一些方法可以解決這個(gè)問(wèn)題,例如模式,或者你可以這么想,其實(shí)谷歌機(jī)器人在抓取單頁(yè)應(yīng)用程序時(shí)沒(méi)有那么糟糕。谷歌正在這方面努力推進(jìn),但不要指望在年會(huì)看到任何突破。 對(duì)于什么是全棧開發(fā)者并沒(méi)有一個(gè)明確的定義。但是,有一件事是肯定的:2019 年對(duì)全棧開發(fā)者的需求量很大。在本文中,我將向你概述一些趨勢(shì),你可以嘗試根據(jù)這些趨勢(shì)來(lái)確定你可能要投入的...
摘要:但是,有一件事是肯定的年對(duì)全棧開發(fā)者的需求量很大。有一些方法可以解決這個(gè)問(wèn)題,例如模式,或者你可以這么想,其實(shí)谷歌機(jī)器人在抓取單頁(yè)應(yīng)用程序時(shí)沒(méi)有那么糟糕。谷歌正在這方面努力推進(jìn),但不要指望在年會(huì)看到任何突破。 對(duì)于什么是全棧開發(fā)者并沒(méi)有一個(gè)明確的定義。但是,有一件事是肯定的:2019 年對(duì)全棧開發(fā)者的需求量很大。在本文中,我將向你概述一些趨勢(shì),你可以嘗試根據(jù)這些趨勢(shì)來(lái)確定你可能要投入的...
摘要:關(guān)于結(jié)構(gòu)體內(nèi)存對(duì)齊是什么,請(qǐng)參考源碼學(xué)習(xí)內(nèi)存管理筆記。這說(shuō)明在當(dāng)前情況下,字符串結(jié)構(gòu)中的柔性數(shù)組的起始位置并不受是否加關(guān)鍵字而影響,是緊跟在結(jié)構(gòu)體后面的,所以節(jié)省內(nèi)存這個(gè)說(shuō)法并不成立。 baiyan 全部視頻:https://segmentfault.com/a/11... 今天我們正式進(jìn)入redis5源碼的學(xué)習(xí)。redis是一個(gè)由C語(yǔ)言編寫、基于內(nèi)存、單進(jìn)程、可持久化的Key-Va...
閱讀 806·2021-09-06 15:02
閱讀 2447·2019-08-30 15:43
閱讀 2172·2019-08-30 11:26
閱讀 2378·2019-08-26 12:12
閱讀 3546·2019-08-23 18:24
閱讀 3263·2019-08-23 18:16
閱讀 702·2019-08-23 17:02
閱讀 2250·2019-08-23 15:34