1采郎、可以使用表達(dá)式定義常量
在之前的 PHP 版本中苔悦,必須使用靜態(tài)值來定義常量,聲明屬性以及指定函數(shù)參數(shù)默認(rèn)值报咳。 現(xiàn)在你可以使用包括數(shù)值侠讯、字符串字面量以及其他常量在內(nèi)的數(shù)值表達(dá)式來 定義常量、聲明屬性以及設(shè)置函數(shù)參數(shù)默認(rèn)值暑刃。
<?php
const ONE = 1;
const TWO = ONE * 2; //定義常量時允許使用之前定義的常量進(jìn)行計算
class C {
const THREE = TWO + 1;
const ONE_THIRD = ONE / self::THREE;
const SENTENCE = 'The value of THREE is '.self::THREE;
public function f($a = ONE + self::THREE) { //允許常量作為函數(shù)參數(shù)默認(rèn)值
return $a;
}
}
echo (new C)->f()."\n";
echo C::SENTENCE;
?>
可以通過 const 關(guān)鍵字來定義類型為 array 的常量厢漩。
<?php
const ARR = ['a', 'b'];
echo ARR[0];
?>
2、使用 ... 運(yùn)算符定義變長參數(shù)函數(shù)
現(xiàn)在可以不依賴 func_get_args()岩臣, 使用 ... 運(yùn)算符 來實(shí)現(xiàn) 變長參數(shù)函數(shù)溜嗜。
<?php
function test(...$args)
{
print_r($args);
}
test(1,2,3);
//輸出
Array
(
[0] => 1
[1] => 2
[2] => 3
)
?>
3宵膨、使用 ** 進(jìn)行冪運(yùn)算
加入右連接運(yùn)算符 ** 來進(jìn)行冪運(yùn)算。 同時還支持簡寫的 **= 運(yùn)算符炸宵,表示進(jìn)行冪運(yùn)算并賦值辟躏。
printf(2 ** 3); // 8
$a = 2;
$a **= 3;
printf($a); // 8
4、use function 以及 use const
use 運(yùn)算符可以在類中導(dǎo)入外部的函數(shù)和常量了土全。 對應(yīng)的結(jié)構(gòu)為 use function 和 use const捎琐。
<?php
namespace Name\Space {
const FOO = 42;
function f() { echo __FUNCTION__."\n"; }
}
namespace {
use const Name\Space\FOO;
use function Name\Space\f;
echo FOO."\n";
f();
}
?>
5、加入 hash_equals() 函數(shù)裹匙,以恒定的時間消耗來進(jìn)行字符串比較瑞凑,以避免時序攻擊
<?php
$expected = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('1234', '$2a$07$usesomesillystringforsalt$');
var_dump(hash_equals($expected, $incorrect)); // false
?>
6、加入 __debugInfo()
當(dāng)使用 var_dump() 輸出對象的時候概页,可以用來控制要輸出的屬性和值籽御。返回值必須是個數(shù)組。
<?php
class C {
private $prop;
public function __construct($val) {
$this->prop = $val;
}
public function __debugInfo() {
return array(
"prop" => $this->prop
);
}
}
var_dump(new C(42));
?>