PHP7與php5
php在2015年12月03日發布了7.0正式版,帶來了許多新的特性,以下是不完全列表:
-
性能提升:PHP7比PHP5.6性能提升了兩倍。 Improved performance: PHP 7 is up to twice as fast as PHP 5.6
-
全面一致的64位支持。 Consistent 64-bit support
-
以前的許多致命錯誤,現在改成拋出異常。Many fatal errors are now Exceptions
-
移除了一些老的不在支持的SAPI(服務器端應用編程端口)和擴展。Removal of old and unsupported SAPIs and extensions
-
新增了空接合操作符。The null coalescing operator (??)
-
新增加了結合比較運算符。Combined comparison Operator (<=>)
-
新增加了函數的返回類型聲明。Return Type Declarations
-
新增加了標量類型聲明。Scalar Type Declarations
-
新增加匿名類。Anonymous Classes
本教程主要講解swoole將要用到或有相關性的特性
致命錯誤將可用異常形式拋出
在php7之后,大部分錯誤可通過異常形式拋出,并可使用catch攔截,例如:
try {
$a->test();//未定義該對象并沒有該方法,拋出一個Throwable類
// Code that may throw an Exception or Error.
} catch (Throwable $t) {
var_dump($t->getMessage());
// Executed only in PHP 7, will not match in PHP 5
} catch (Exception $e) {
}
運行之后將打印一條報錯語句:
string(40) "Call to a member function test() on null"
?? null合并運算符
由于日常使用中存在大量同時使用三元表達式和 isset()的情況, php7添加了null合并運算符 (??) 這個語法糖。如果變量存在且值不為NULL, 它就會返回自身的值,否則返回它的第二個操作數。例如:
$a = $b??0;
//如果當$b為null,則返回0.如果$b不為null,則返回$b;
標量類型聲明
標量類型聲明 有兩種模式: 強制 (默認) 和 嚴格模式。 現在可以使用下列類型參數(無論用強制模式還是嚴格模式): 字符串(string), 整數 (int), 浮點數 (float), 以及布爾值 (bool)。它們擴充了PHP5中引入的其他類型:類名,接口,數組和 回調類型。例如:
<?php
function a(
?int $a /*參數必須是int或者null*/,
string $b/*參數必須string*/,
Closure $function /*參數必須是匿名函數*/,
array $array/*參數必須是數組*/
){}
類名/接口限定都需要考慮命名空間
返回值類型聲明
PHP 7 增加了對返回類型聲明的支持。 類似于參數類型聲明,返回類型聲明指明了函數返回值的類型。可用的類型與參數聲明中可用的類型相同。例如:
<?php
function a():int{//必須返回int類型,否則報錯
return 1;
}
function b():?int{//必須返回int類型或者null類型,否則報錯
return 'das';
}
太空船操作符<=>(組合比較符)
太空船操作符用于比較兩個表達式。當$a小于、等于或大于$b時它分別返回-1、0或1。 比較的原則是沿用 PHP 的常規比較規則進行的。
<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1