亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言

PHP語言最令人抓狂的十二種特性

時(shí)間:2024-07-10 05:00:33 php語言 我要投稿
  • 相關(guān)推薦

PHP語言最令人抓狂的十二種特性

  命名約定前后矛盾、版本兼容相互沖突,PHP語言在各個(gè)層面上都給開發(fā)人員帶來了詭異而難解的謎局—這就是我們今天要討論的話題。我們真的對(duì)PHP深惡痛絕嗎?不,當(dāng)然不是。如果真是這樣,我們就不會(huì)如此廣泛地使用Drupal、WordPress以及其它一些同類框架。假設(shè)我們真的討厭PHP,那么最直接的辦法是轉(zhuǎn)向Java而非在這里放什么厥詞。以下十二條內(nèi)容來自我們多年以來對(duì)該語言的實(shí)踐使用經(jīng)驗(yàn)。

  轉(zhuǎn)換令人頭痛

  在利用PHP進(jìn)行項(xiàng)目創(chuàng)建的過程中,最大的挑戰(zhàn)之一在于牢記我們哪些時(shí)候需要輸入HTML、而哪些時(shí)代需要輸入PHP代碼。將二者相結(jié)合正是PHP語言的一大賣點(diǎn),但要充分發(fā)揮其優(yōu)勢(shì)卻著實(shí)不是易事。當(dāng)我們查看某個(gè)文件并關(guān)注其中的代碼時(shí),首先需要搞清楚的就是—那些迫使我們不得不從HTML編寫轉(zhuǎn)向創(chuàng)建服務(wù)器指令的標(biāo)簽都在哪里?各位必須要高度重視這些標(biāo)簽,因?yàn)橹挥羞@樣我們才能將代碼與標(biāo)記整合起來并使其順暢運(yùn)作。當(dāng)然,大多數(shù)情況下它只會(huì)讓人暈頭轉(zhuǎn)向。

  標(biāo)記的迷宮

  將服務(wù)器指令與瀏覽器標(biāo)記結(jié)合起來實(shí)在是一種失誤。在Java這方面,其研發(fā)團(tuán)隊(duì)嚴(yán)格遵循著MVC模式。數(shù)據(jù)模型被歸于一個(gè)文件中,用于控制視圖的布局結(jié)構(gòu)被歸于另外的文件中,而用于構(gòu)建控制器的邏輯也擁有自己的歸屬文件。將這些條目區(qū)分并隔離開來能夠讓整個(gè)項(xiàng)目變得更有條理。但在PHP方面,最基本的設(shè)計(jì)思路就是開發(fā)者應(yīng)當(dāng)將HTML標(biāo)記與服務(wù)器的控制器邏輯雜糅在一起。雖然我們不是沒辦法把它們區(qū)分開—大多數(shù)人也確實(shí)是這樣做的—不過一旦開始專門處理這項(xiàng)任務(wù),很多朋友可能會(huì)像我們一樣問自己“為什么我們非要用PHP不可?”

  命名約定的不一致性與特殊性

  大家知不知道我們什么時(shí)候需要用到下劃線符號(hào)?可以看到,base64_encode方法中用到了下劃線,但urlencode則沒有。此外,php_uname這一名稱中使用了下劃線,而phpversion則沒有。為什么會(huì)這樣?有沒有人考慮過這個(gè)問題?大家有沒有編輯過API?

  與此同時(shí),strcmp函數(shù)是不能夠大寫的,但strcasecmp卻可以。另外,strpos不能大寫,stripos則可以。到底是其中的字母“i”決定了能否大寫,還是函數(shù)整體名稱決定的?誰能記得住這么多亂七八糟的規(guī)則?當(dāng)然,開發(fā)者們必須得記清楚。

  災(zāi)難般的排序

  我們到底需要多少種排序函數(shù)?Java擁有一項(xiàng)基礎(chǔ)排序函數(shù)外加一個(gè)適用于所有對(duì)象的簡單接口。如果大家希望使用其它算法、動(dòng)手添加進(jìn)去即可,而且大多數(shù)情況下標(biāo)準(zhǔn)函數(shù)已經(jīng)完全夠用。而在PHP這邊,光是排序函數(shù)就能列出一條長長的清單:usort、sort、uksort以及array_sort等等(請(qǐng)注意,其中有一些還需要用到下劃線)。所以,請(qǐng)大家馬上把這些內(nèi)容記到小本上,并祈禱自己在實(shí)際使用時(shí)不會(huì)搞混吧。

  開源存在一定局限性

  PHP也許確實(shí)擁有開源的諸多優(yōu)勢(shì),但緩存等卓越功能卻只存在于商用版本當(dāng)中。當(dāng)然,這就是現(xiàn)實(shí)社會(huì),畢竟Zend需要借此賺取利潤。再有,該公司還需要通過向特定用戶群體出售最佳版本的方式支持整個(gè)PHP項(xiàng)目。抱怨這一點(diǎn)就像抱怨地心引力帶來的不便一樣,正確但卻毫無意義—地球就在那里,根本不鳥你喜不喜歡。請(qǐng)大家活得理性一些,別總幻想著人們都能活在烏托邦式的開源環(huán)境當(dāng)中。

  糟糕的命名空間

  大家有沒有創(chuàng)建自己函數(shù)的打算?如果有,請(qǐng)首先確定到底要使用PHP 5.3或者其后續(xù)版本,因?yàn)檫@里正是命名空間出現(xiàn)的分界線。如果大家希望使用早期版本,則必須確保編碼內(nèi)容與庫之間不存在沖突—畢竟在早期發(fā)展階段,PHP中的所有內(nèi)容都具備全局化屬性。如果大家決定使用PHP 5.3并接受命名空間的加入,那么請(qǐng)作好準(zhǔn)備迎接“反斜杠”—一個(gè)丑陋的標(biāo)點(diǎn)符號(hào)—的降臨。

  糟糕的type安全

  這個(gè)問題簡直可怕,首先舉個(gè)PHP程序員們喜聞樂見的例子:

  (string)"false"

  (int)0

  請(qǐng)注意,這并不屬于那種某些PHP支持者所爭論的“函數(shù)副作用”的典型情況。畢竟t當(dāng)中也包含著大量由于type轉(zhuǎn)換所引發(fā)的同類情況。事實(shí)上,這一行 想表達(dá)的是:左側(cè)為字符串,右側(cè)為一個(gè)整數(shù)。只不過左側(cè)與右側(cè)內(nèi)容完全相等。照這樣說來,如果讓PHP的設(shè)計(jì)者負(fù)責(zé)管理、世界上的每個(gè)人都能彼此和睦相處。

  選擇太多,冗余太多

  PHP語言的一大特色就是可做的事太多,做事的途徑同樣太多。每一行命令的結(jié)尾都可以通過數(shù)字符號(hào)或者雙斜線來進(jìn)行注釋。無論是浮點(diǎn)數(shù)字還是雙精度數(shù)字都代表著同樣的含義。簡單的設(shè)計(jì)往往會(huì)被人們所忽略,因?yàn)榇蠹以诖a貢獻(xiàn)過程中喜歡添加自己的小特性。這有點(diǎn)像依靠委員會(huì)體系進(jìn)行設(shè)計(jì),只不過該委員會(huì)從來沒考慮到過把其中的差異性剔除掉。

  詭異的變量命名規(guī)則

  把美元符號(hào)作為前綴實(shí)在不是個(gè)好主意。也許強(qiáng)制性地在所有變量前添加這個(gè)符號(hào)是為了更輕松地將其插入到模板當(dāng)中,但這樣說來常數(shù)內(nèi)容也同樣需要這么個(gè)符號(hào)啊—為什么實(shí)際上卻用不著呢?

  CPU資源爭奪戰(zhàn)

  對(duì)于32位計(jì)算設(shè)備來說,整數(shù)數(shù)值過大始終是個(gè)無法回避的難題。不過在另一方面,64位設(shè)備卻不會(huì)受此影響,也就是說代碼在不同設(shè)備上的運(yùn)行狀態(tài)是不同的。大家可以在自己的筆記本上測(cè)試一下,我可以保證事實(shí)絕對(duì)是如此。但一旦把運(yùn)行平臺(tái)轉(zhuǎn)換成服務(wù)器,情況則會(huì)再度變化。這時(shí)如果大家希望重現(xiàn)自己臺(tái)式機(jī)上的錯(cuò)誤,結(jié)果恐怕要令各位失望。惟一的好消息是,32位設(shè)備將很可能最終消失。

  SQL注入

  將SQL注入這一安全漏洞的主要形式之一歸咎于PHP確實(shí)有失公允。人們?cè)谄渌Z言當(dāng)中同樣會(huì)不慎輸入奇怪的SQL字符串。之所以將其納入文章,主要是考慮到PHP語言更容易讓該漏洞攫取數(shù)據(jù)并發(fā)送至MySQL—簡單是輕而易舉。雖然新手在使用任何一種語言時(shí)都可能犯下同樣的錯(cuò)誤,但這類情況在PHP中出現(xiàn)的機(jī)率明顯要高得多得多。

  不兼容式的變更太多太多

  不同版本之間存在巨大差異,兼容性問題也絕不是小事。以Java或者t為代表的編程語言在快速發(fā)展的同時(shí)也犧牲了向下兼容的特性。事實(shí)上,老代碼在新設(shè)備上無法運(yùn)行的問題并不少見。但這一切與PHP的情況其實(shí)不盡相同。在PHP方面,不同版本之間往往差別巨大,因此大家只能祈禱自己的服務(wù)器已經(jīng)安裝了正確的版本,否則只有在出現(xiàn)嚴(yán)重問題時(shí)才能意識(shí)到大事不妙。總而言之,在查看服務(wù)器上是否有項(xiàng)目需要升級(jí)時(shí),請(qǐng)優(yōu)先把目光對(duì)準(zhǔn)PHP。


【PHP語言最令人抓狂的十二種特性】相關(guān)文章:

PHP語言的特性有哪些06-04

PHP是世界上最應(yīng)該選擇的語言10-20

你應(yīng)該學(xué)習(xí)的10個(gè)PHP特性10-06

php語言簡介08-25

php語言的優(yōu)勢(shì)09-06

PHP語言的簡介09-23

什么是php語言10-24

10個(gè)你應(yīng)該學(xué)習(xí)使用的PHP特性07-27

php語言是什么05-21

PHP語言的優(yōu)缺點(diǎn)08-09