PHP 5.6 新功能
好一陣子沒更新的 PHP 終於發表新版本 5.6 !
先來記錄向下相容有問題的功能:
先來記錄向下相容有問題的功能:
- json_decode
將消除非小寫的變數,例如 true、false、null
要設定相應json_last_error() GMP Resources
這裡說的不是出問題油的那個 XD
而是 這個
在 php 5.6 中 GMP 資源將會是物件 objects.
基本上這個改變不會影響目前已開發的程式;除非在檢查型態時使用了is_resource()Mcrypt
所有的加密功能將不接受尺寸不符合的 key 和 IVs ,包含mcrypt_encrypt(),mcrypt_decrypt(),mcrypt_cbc(),mcrypt_cfb(),mcrypt_ecb(),mcrypt_generic(),mcrypt_ofb().- 陣列值的覆寫
php 5.6 以前版本在 class 中使用陣列,並且陣列的 key 使用 class 變數指定,會導致該值不能輸入,在 5.6 中修改為可以顯示,例如:classhelloWorld {constONE = 1;public$array= [self::ONE =>'Eclipse','Sublime','PHPStrome',];}$hello=newhelloWorld();print_r($hello);// Before PHP 5.6array('Sublime','PHPStrome')// PHP 5.6array('Eclipse','Sublime','PHPStrome')
PHP 5.6 新功能
- 常數表達式
在 5.6 中常數可以是個表達式 包含數字和字串。
這個作法在 5.6 以前可能會用上常數、 function ,
PHP 5.6 可以這麼做constONE = 1;// Scalar Expression in constantconstTWO = ONE * 2;classhelloWorld {// Scalar Expression in PropertyconstTHREE = TWO + 1;// Scalar Expression in Methodspublichello f($a= ONE + self::THREE) {return$a;}}echo(newhelloWorld)->hello()."\n"; - 藉由 "..." 使用可變函數
在這之前使用func_get_args()來取得函數中可調用的參數。
但在 PHP 5.6 這些都可省下,因為可以透過 ... 來取得。functionmyTools($name, ...$tools) {echo"Name:".$name.'<br />';echo"My Tool Count:".count(tools);}myTools('Avinash','Eclipse');// Output:// Name: Avinash// My Tool Count: 1myTools('Avinash','Eclipse','Sublime');// Output:// Name: Avinash// My Tool Count: 2myTools('Avinash','Eclipse','Sublime','PHPStrom');// Output:// Name: Avinash// My Tool Count: 3<b></b> - 變數拆包 Argument Unpacking
我們可以使用 ... 來拆包參數,這個參數可以是陣列或物件(traversable objects)。
例如:functionmyTools($name,$tool1,$tool2,$tool3) {echo"Name:".$name.'<br />';echo"Tool1:",$tool1.'<br />';echo"Tool2:",$tool2.'<br />';echo"Tool3:",$tool3;}$myTools= ['Eclipse','Subline','PHPStrom'];myTools('Avinash', ...$myTools);// Output:// Name: Avinash// Tool1: Eclipse// Tool1: Subline// Tool1: PHPStrome 使用 ** 來取得次方運算
例如:
echo 2**3; //計算 2的3次方,結果 8;
變數次方運算,例如
$a = 2;
$a **=3;
echo $a; //這裡顯示 8
要注意順序性,例如
echo 2**2**4;
通常我們以為是 (2**2)**4 結果是256,
實際上是 2**(2**4) ,結果為 65536
計算順序為從右到左。設定預設編碼default_charset()
使用
設定編碼,受影響的函數包含:htmlentities(),html_entity_decode(),htmlspecialchars()- 加大上傳檔案尺寸
最大上傳檔案現在可以達 2GB. php://input 現在可以重複使用 http://mr.nio.tw
這個作用比起 POST 資料可以大幅減少記憶體的使用。
關於 php:// 請參考這裡。http://mr.nio.tw- use 支援 function 和 常數(const)
phpdbg
建議使用功能
- 在 class 外部執行靜態方式產生的錯誤改變
classhelloWorld() {publicstatichiWorld () {}}$hello=newhelloWorld();$hello->hiWorld();// Before PHP 5.6E_STRICT error// From PHP 5.6E_DEPRECATED error<b></b> - 廢除 $HTTP_RAW_POST_DATA
採用 php://input 替代。 編碼設定Encoding Setting
由於推出default_charset() ,不建議使用iconv和mbstring.
以上用自己理解翻譯自這裡