當前位置:
首頁 > 最新 > 網站編程語言PHP5.6特性回顧

網站編程語言PHP5.6特性回顧

PHP社區的先驅們維護四個版本,幾天前多個版本號更新,PHP5.6、7版本號均有向前推進

PHP5.6新特性

1、可用表達式定義常量

2、[重要]可用...運算符定義變長參數函數、展開參數函數

3、使用 ** 進行冪運算

4、對use運算符進行function 和const引入擴展[面向對象]

5、新增一個交互調試器phpdbg

6、對一些字元編碼相關函數,適用php.ini的default_charset作為默認字符集

7、可以多次打開讀取php://input

8、支持大於2GB文件 上傳

9、GMP支持運算符重載

10、使用hash_equals()比較字元串避免時序攻擊

11、新增__debugInfo()用於var_dump()輸出對象控制輸出屬性和值[面向對象]

12、加入gost-crypto 散列演算法

13、對SSL/TLS的支持大幅度提升

14、pgsql支持非同步方式連接資料庫及執行查詢

函數參數可變運算符

這一版本新增的...運算符可以稱作語法糖,讓函數變數個數彈性伸縮,更加智慧出現的原因是函數參數個數動態可變,怎麼讓程序去適應而不是讓開發者寫很多呆萌分支窮舉,例如

這個...運算符很像省略號,個人更喜歡叫做:

伸縮函數操作符、彈性函數操作符

(可以短暫思考一下設計者為什麼把操作符放前面...$p,而不是後面$p...

有兩種使用情景:

1) 在定義函數時使用,表明函數將自適應接收1到多個參數。這種寫法用於改進自定義函數,舉個例子:

現在可以這樣寫

調用對比:

2) 在傳入參數時使用,表明該變數將變身為1到多個參數。這種用法可用於增加系統函數調用靈活性,因為系統函數參數個數固定,例如:

求知實驗室

還有一種情況,在函數定義和調用都使用...操作符,繼續沿用上面的求和函數sum為其打call,我們又要用你舉例子

sum函數比剛才更簡單少了一行語句

注意:操作符...同時出現在函數定義和調用的情形在實際中並不多見。已經存在的系統函數從未有過申明...參數的寫法,而你的自定義函數需要從現在開始創造,所以有時簡單並不是實踐中最有用的

最佳實踐

現在就要實際運用...操作符解決實際問題,我們的目標鎖定在mysqli方式操作資料庫的插入操作stmt的參數綁定上,讓插入更加智能同時不依賴任何MVC框架輕鬆打造自己的mysqli操作類

現在我們有一個學生信息表student,其中name、school欄位是字元類型

在MySQL插入數據的SQL語句寫法

在PHP中對應的寫法

當這個表增加了兩個欄位性別$sex(INT)、年級$garde(VARCHAR),那麼這個插入語句就要修改,而且你還要去判斷哪些欄位是字元串,加上"{$變數}",哪些是整型,去掉" "。當大量的工作是操作資料庫時,SQL改來改去顯得蠢爆了,另外如果這些值來自用戶輸入,還要過濾這些輸入參數防止異常,也許就是——災難的開端

最終實現插入的效果,不必考慮表結構不依賴任何框架,只要插入數據$data變化則自動匹配欄位執行插入

實現這個myDB類思路是用到了MySQL的預處理語句機制和上面所說的PHP彈性操作符函數語法。PHP用mysqli擴展提供的mysqli_stmt類來對接此機制,一條預處理語句

PHP中等價的寫法:

這種寫法只是解決了一半問題,不用過濾輸入參數,但再多傳兩個參數。小心翼翼的修改了$sql的欄位,對應加了?號的個數,修改了綁定類型並且對應參數,這一套操作寫下來天啦嚕

工作中一個表可能有幾十個欄位,這個拼接可能要從白天肝到天黑,那麼?

藉助...操作符 我們立即想到了這樣

然後意識到哪裡不對,想到的可能是下面的寫法

靜似大功告成,我們發現一旦$paramList變化,$sql、$typeStr都要跟著改變,另外$paramList變數的順序影響著$typeStr的順序,所以有了最終的實現思路結構,由傳入參數$data直接影響,只要數據表有對應欄位自動匹配插入:

特別注意$paramList最終是數字索引數組:

設計思路

首先我們知道資料庫中一個表的欄位是有限的,每個欄位的類型也認為是固定的,而且每個欄位名字是唯一的,同一個表不會有兩個欄位叫name。向一個表插入數據,先問問這個表有哪些欄位,讓程序去自動匹配存在的欄位拼接語句執行插入。藉助預處理語句避免了過濾參數,藉助...操作符增加程序彈性變得更加智能

完整的實現類代碼將在後面的推送中提供

預處理語句是MySQL提供的功能

MySQL從4.1版本開始提供了一種名為預處理語句(prepared statement)的機制。它可以將整個命令向MySQL伺服器發送一次,以後只有參數發生變化,MySQL伺服器只需對命令的結構做一次分析就夠了。這不僅大大減少了需要傳輸的數據量,還提高了命令的處理效率。可以用mysqli擴展模式中提供的mysqli_stmt類的對象

肝文章可比寫代碼更幸苦,尤其是包含技術的文章

歡迎關注留言交流,一個執著於原生PHP的自學人


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 編程夜未眠 的精彩文章:

TAG:編程夜未眠 |