今天被pdo的lastInsertId折騰了一下午,實在是醉了,使用exec執行insert導致lastInsertId返回的始終是0,必須使用prepare/execute才能正常擷取。
好多時候都覺得PHP為什麼這麼隨意啊,empty/isset/is_null,嘿,真TMD奇葩啊(我就爆粗了怎麼了,不能忍)。可能是曆史遺留原因,或者是有一些我不知道的原因請一定指出來,一直很奇怪當初設計的時候為什麼不能是:is_empty/is_set/is_null,或者是:isEmpty/isSet/isNull?這樣的例子還體現在str類函數上,這裡面還有參數順序的問題,比如str_replace目標字串在後面,substr/strpos在前面,我就想問下,一門語言怎麼能隨意到這種程度呢?
另外還有類型轉換,每次拿到使用者傳過來的值都有點怕怕呢,很多方法不加strict都不敢用呢,我問你為什麼這樣,你說:因為我“弱”啊!你看只要你不用===,判斷我都可以一溜煙跑下去呢!
剩下就是異常,可預見性的要麼是exit/die,高大上一點的就用Exception,不過大多數Exception還要我自己拋呢。這還沒完,大人您還有error呢,還有等級呢,異常還捕獲不到呢,要做跳板呢。
回複內容:
今天被pdo的lastInsertId折騰了一下午,實在是醉了,使用exec執行insert導致lastInsertId返回的始終是0,必須使用prepare/execute才能正常擷取。
好多時候都覺得PHP為什麼這麼隨意啊,empty/isset/is_null,嘿,真TMD奇葩啊(我就爆粗了怎麼了,不能忍)。可能是曆史遺留原因,或者是有一些我不知道的原因請一定指出來,一直很奇怪當初設計的時候為什麼不能是:is_empty/is_set/is_null,或者是:isEmpty/isSet/isNull?這樣的例子還體現在str類函數上,這裡面還有參數順序的問題,比如str_replace目標字串在後面,substr/strpos在前面,我就想問下,一門語言怎麼能隨意到這種程度呢?
另外還有類型轉換,每次拿到使用者傳過來的值都有點怕怕呢,很多方法不加strict都不敢用呢,我問你為什麼這樣,你說:因為我“弱”啊!你看只要你不用===,判斷我都可以一溜煙跑下去呢!
剩下就是異常,可預見性的要麼是exit/die,高大上一點的就用Exception,不過大多數Exception還要我自己拋呢。這還沒完,大人您還有error呢,還有等級呢,異常還捕獲不到呢,要做跳板呢。
不要遇了點挫折就全盤否定好不好。被PDO折騰一下下午說明你對PHP還不夠熟悉而已,就算不熟悉,難道沒有手冊,不會百度嗎,網上找一個完整可用的例子看完再寫不行?這也能怪PHP?用句潮語來說:“我也是醉了”。要多點從自己身上找問題好嗎?
你說的函數名不統一、比較亂等問題,本身就是有它的曆史原因,PHP的使用者眾多,很多東西不是說改就改的。當然隨著時間推移,我們現在慢慢看到PHP在不斷進步,PHP7.0也即將發布了,它所做的效能最佳化和新添加的特徵,都是值得我們期待的。
以前也用過JAVA,現在用PHP也差不多3年了,也沒有感覺弱類型有什麼不好的,習慣了你就完全可以把控它。
有時候,發發牢騷沒關係,特別是不熟悉的時候都容易這樣。但一門語言你既然選擇它,就是看中它的優勢來的。老是盯著它的不好還怎麼學、怎麼進步。如果覺得它哪裡不好,自己可以嘗試找辦法去解決或者彌補它的不好,當然前提是你花更多時間去瞭解它。
既然舉報我答非所問,我就改一下吧。重新看了一遍題主的問題,一大堆吐槽裡面夾著一句問題:“我就想問下,一門語言怎麼能隨意到這種程度呢?”感覺題主是來求認同的而不是來求解惑的。很想反問題主:提問題怎麼可以隨意到這種程度呢?
PHP語言的高度不一致性的確讓很多人吐槽過了,這是事實,而造成這一現狀的根本原因是PHP壓根兒就不是一門設計出來的語言,而是一門成長出來的語言。
當年是一個哥們兒覺得CGI寫Web伺服器程式太麻煩了,然後就自己折騰出了一個開發個人網站的工具包,後來丟到了開源社區,社區上的人們都覺得這個工具包還不錯,於是你加一點功能,我加一點功能地擴充這個工具包,最後演化成了PHP語言。早期PHP就是Personal Home Page的縮寫,後來為了趕時髦才改成了迴文式的PHP: Hypertext Preprocessor。
像Ruby、Python或者C#這些語言,都是由頗具經驗的軟體開發人員精心設計而來的。一開始就是為了做出一種適用於某些情境的程式設計語言,語言一致性高,文法設計精妙,處處閃爍著設計者的智慧和經驗。而且這些語言從發布之日起就一直是官方團隊領頭開發,社區貢獻的代碼都需要經過嚴格審核才能進入核心版本庫。
然而早期的PHP根本沒有所謂核心開發組,大家在各個技術新聞群組上交流意見,用FTP分享代碼。PHP解譯器是用C寫的,大家紛紛把各種C語言的程式碼程式庫封裝成PHP語言的函數,於是也保留下來各種流派的函數命名規則。後來甚至就連最早開發和發布PHP的那哥們兒也不管了,一直到3.0版時,社區才有了幾個人組成核心團隊來發布官方版本,然而他們更主要的工作是協調社區意見和提供bug跟蹤。PHP的物件導向模型更是到了5.0時代才由Zend公司的開發人員做出來。
是不是覺得非常亂?告訴你一個事實:不光PHP,整個Web世界就是一片混亂中搞出來的。你看HTML裡的標籤,為什麼有全寫也有縮寫,
、</code>這種寫法和
、
這種寫法並存?因為HTML發展之初也是沒標準的,早期有過
的寫法,也有過
的寫法,不同的個人開發人員給出不同的實現罷了,直到有一天,支援第一種寫法的瀏覽器成為絕對主流了,於是才有了標準。PHP一直是典型的自由軟體的運作方式,先有大家的自由改進,然後互取所長,然後攢出一個較優選擇成為官方,然而大把多人在官方基礎之上自己改東西,有一些有幸被官方收納到未來版本人,有一些就沉沒了。
那麼怎麼解決亂這個問題呢?許多人都提出瞭解決方案,比如把命名不一致的函數封裝到架構裡,把empty之類的像函數而又不是函數的文法也封到架構裡,把一切混亂包起來,只對開發人員暴露出優雅的部分。然而現實情況是PHP語言領域沒有一套唯一的架構,世界上的知名PHP開發架構不下20種,各公司各團隊自己庫和架構更是海了去了。
PHP最後就和C語言一樣,只能靠人來解決這個問題——別寫爛代碼,儘管語言允許你亂寫——選擇一種大家喜歡的語言風格,定為團隊標準,然後執行它。還有,用一個好的IDE,自動完成提示能把你從記憶各種不同風格的函數中解放出來。
-