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 中修改為可以顯示,例如:class
helloWorld {
const
ONE = 1;
public
$array
= [
self::ONE =>
'Eclipse'
,
'Sublime'
,
'PHPStrome'
,
];
}
$hello
=
new
helloWorld();
print_r(
$hello
);
// Before PHP 5.6
array
(
'Sublime'
,
'PHPStrome'
)
// PHP 5.6
array
(
'Eclipse'
,
'Sublime'
,
'PHPStrome'
)
PHP 5.6 新功能
- 常數表達式
在 5.6 中常數可以是個表達式 包含數字和字串。
這個作法在 5.6 以前可能會用上常數、 function ,
PHP 5.6 可以這麼做const
ONE = 1;
// Scalar Expression in constant
const
TWO = ONE * 2;
class
helloWorld {
// Scalar Expression in Property
const
THREE = TWO + 1;
// Scalar Expression in Methods
public
hello f(
$a
= ONE + self::THREE) {
return
$a
;
}
}
echo
(
new
helloWorld)->hello().
"\n"
;
- 藉由 "..." 使用可變函數
在這之前使用func_get_args()來取得函數中可調用的參數。
但在 PHP 5.6 這些都可省下,因為可以透過 ... 來取得。function
myTools(
$name
, ...
$tools
) {
echo
"Name:"
.
$name
.
'<br />'
;
echo
"My Tool Count:"
.
count
(tools);
}
myTools(
'Avinash'
,
'Eclipse'
);
// Output:
// Name: Avinash
// My Tool Count: 1
myTools(
'Avinash'
,
'Eclipse'
,
'Sublime'
);
// Output:
// Name: Avinash
// My Tool Count: 2
myTools(
'Avinash'
,
'Eclipse'
,
'Sublime'
,
'PHPStrom'
);
// Output:
// Name: Avinash
// My Tool Count: 3<b>
</b>
- 變數拆包 Argument Unpacking
我們可以使用 ... 來拆包參數,這個參數可以是陣列或物件(traversable objects)。
例如:function
myTools(
$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 外部執行靜態方式產生的錯誤改變
class
helloWorld() {
public
static
hiWorld () {
}
}
$hello
=
new
helloWorld();
$hello
->hiWorld();
// Before PHP 5.6
E_STRICT error
// From PHP 5.6
E_DEPRECATED error<b>
</b>
- 廢除 $HTTP_RAW_POST_DATA
採用 php://input 替代。 編碼設定
Encoding Setting
由於推出default_charset() ,不建議使用
iconv
和mbstring
.
以上用自己理解翻譯自這裡