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