PHP7新特性_PHP 常用教程
作者:佚名 來源:本站 時間:2018-01-01 點擊:79次
PHP(外文名:PHP Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。
標量類型聲明
PHP 7 中的函數的形參類型聲明可以是標量了。在 PHP 5 中只能是類名、接口、array 或者 callable (PHP 5.4,即可以是函數,包括匿名函數),現在也可以使用 string、int、float和 bool 了。
php // 強制模式 function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));
以上實例會輸出:
int(9)
需要注意的是上文提到的嚴格模式的問題在這里同樣適用:強制模式(默認,既強制類型轉換)下還是會對不符合預期的參數進行強制類型轉換,嚴格模式下則觸發 TypeError 的致命錯誤。
返回值類型聲明
PHP 7 增加了對返回類型聲明的支持。 類似于參數類型聲明,返回類型聲明指明了函數返回值的類型�?捎玫念愋团c參數聲明中可用的類型相同。
php function arraysSum(array ...$arrays): array { return array_map(function(array $array): int { return array_sum($array); }, $arrays); } print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
以上實例會輸出:
Array ( [0] => 6 [1] => 15 [2] => 24 )
NULL 合并運算符
由于日常使用中存在大量同時使用三元表達式和 isset()的情況,NULL 合并運算符使得變量存在且值不為NULL, 它就會返回自身的值,否則返回它的第二個操作數。
實例如下:
php // 如果 $_GET['user'] 不存在返回 'nobody',否則返回 $_GET['user'] 的值 $username = $_GET['user'] ?? 'nobody'; // 類似的三元運算符 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>
太空船操作符(組合比較符)
太空船操作符用于比較兩個表達式。當$a大于、等于或小于$b時它分別返回-1、0或1。
實例如下:
php // 整型 echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // 浮點型 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // 字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 ?>
通過 define() 定義常量數組
實例如下:
php define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // 輸出 "cat" ?>
匿名類
現在支持通過new class 來實例化一個匿名類,實例如下:
php interface Logger { public function log(string $msg); } class Application { private $logger; public function getLogger(): Logger { return $this->logger; } public function setLogger(Logger $logger) { $this->logger = $logger; } } $app = new Application; $app->setLogger(new class implements Logger { public function log(string $msg) { echo $msg; } }); var_dump($app->getLogger()); ?>
以上實例會輸出:
object(class@anonymous)#2 (0) { }
Unicode codepoint 轉譯語法
這接受一個以16進制形式的 Unicode codepoint,并打印出一個雙引號或heredoc包圍的 UTF-8 編碼格式的字符串。 可以接受任何有效的 codepoint,并且開頭的 0 是可以省略的。
echo "\u{aa}"; echo "\u{0000aa}"; echo "\u{9999}";
以上實例會輸出:
ª ª (same as before but with optional leading 0's) 香
Closure::call()
Closure::call() 現在有著更好的性能,簡短干練的暫時綁定一個方法到對象上閉包并調用它。
php class A {private $x = 1;} // Pre PHP 7 代碼 $getXCB = function() {return $this->x;}; $getX = $getXCB->bindTo(new A, 'A'); // intermediate closure echo $getX(); // PHP 7+ 代碼 $getX = function() {return $this->x;}; echo $getX->call(new A);
以上實例會輸出:
1 1
為unserialize()提供過濾
這個特性旨在提供更安全的方式解包不可靠的數據。它通過白名單的方式來防止潛在的代碼注入。
php // 轉換對象為 __PHP_Incomplete_Class 對象 $data = unserialize($foo, ["allowed_classes" => false]); // 轉換對象為 __PHP_Incomplete_Class 對象,除了 MyClass 和 MyClass2 $data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]); // 默認接受所有類 $data = unserialize($foo, ["allowed_classes" => true]);
IntlChar
新增加的 IntlChar 類旨在暴露出更多的 ICU 功能。這個類自身定義了許多靜態方法用于操作多字符集的 unicode 字符。
php printf('%x', IntlChar::CODEPOINT_MAX); echo IntlChar::charName('@'); var_dump(IntlChar::ispunct('!'));
以上實例會輸出:
10ffff COMMERCIAL AT bool(true)
若要使用此類,請先安裝Intl擴展
預期
預期是向后兼用并增強之前的 assert() 的方法。 它使得在生產環境中啟用斷言為零成本,并且提供當斷言失敗時拋出特定異常的能力。
php ini_set('assert.exception', 1); class CustomError extends AssertionError {} assert(false, new CustomError('Some error message')); ?>
以上實例會輸出:
Fatal error: Uncaught CustomError: Some error message
use 加強
從同一 namespace 導入的類、函數和常量現在可以通過單個 use 語句 一次性導入了。
php // PHP 7 之前版本用法 use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C; use function some\namespace\fn_a; use function some\namespace\fn_b; use function some\namespace\fn_c; use const some\namespace\ConstA; use const some\namespace\ConstB; use const some\namespace\ConstC; // PHP 7+ 用法 use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC}; ?>
Generator 加強
增強了Generator的功能,這個可以實現很多先進的特性
php php function gen() { yield 1; yield 2; yield from gen2(); } function gen2() { yield 3; yield 4; } foreach (gen() as $val) { echo $val, PHP_EOL; } ?>
以上實例會輸出:
1 2 3 4
整除
新增了整除函數 intdiv(),使用實例:
php var_dump(intdiv(10, 3)); ?>
以上實例會輸出:
int(3)
- 上一篇: PHP MySql 分頁實例
- 下一篇: css支持的百分比計算方法
相關閱讀
推薦游戲
換一換- 1.76裁決火龍手游-1.76裁決火龍傳奇游戲免費下載v1.0.1.3800安卓版
- 綠茵戰神送無限充值卡版(暫未上線)-綠茵戰神送198充值卡版預約v1.2.0無限資源版
- 我給富婆做管家手游(暫未上線)-我給富婆做管家游戲預約v1.0安卓版
- 三界戰歌送千元充值卡版-三界戰歌天天送千充福利版下載v1.0.0送首充版
- 火柴人務必死游戲免費下載-火柴人務必死下載v1.0
- 無盡試煉手游-無盡試煉手機版提供下載v1.0最新版
- 明教風云之九陰九陽滿v版-滿v版無限元寶服下載v1.0.0滿級vip版
- 模擬城市我是市長繽紛冬季版本下載v0.69.21341.22575
- 黑魔法城堡變態版-黑魔法城堡BT版下載v1.1超級變態版
- 人氣排行