PHP 7 のいくつかの新機能

WBOY
リリース: 2016-06-20 12:46:30
オリジナル
1014 人が閲覧しました

1. ?? 演算子 (NULL 合体演算子)

これは非常に便利だと思うので最初に置きます。使用法:

$a = $_GET['a'] ?? 1;
ログイン後にコピー

これは次と同等です:

<?phpif (empty($_GET['a'])) $a = 1;
ログイン後にコピー

三項演算子は次のように使用できることがわかっています:

$a ?: 1
ログイン後にコピー

しかし、これはベースですon $a が定義済みであることを前提とします。新しい ?? 演算子により判断が簡略化されます。

2. 関数の戻り値の型宣言

公式ドキュメントで提供される例 (辺の長さのパラメーター構文は PHP 5.6 以降でのみ使用可能であることに注意してください):

<?phpfunction 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]));
ログイン後にコピー

この例から、関数 (匿名関数を含む) で戻り値の型を指定できるようになったことがわかります。

この宣言の書き方は Swift に似ています。

func sayHello(personName: String) -> String {    let greeting = "Hello, " + personName + "!"    return greeting}
ログイン後にコピー

この機能は、PHP の暗黙的な型変換によって引き起こされるいくつかの問題を回避するのに役立ちます。関数を定義する前に期待される結果について考えると、不要な間違いを避けることができます。

ただし、ここでも注意が必要な機能があります。 PHP 7 では、strict モードを使用する宣言ディレクティブである strict_types が追加されています。

戻り値の型宣言を使用する場合、それが厳密モードで宣言されておらず、戻り値が予期された型でない場合でも、PHP はそれをキャストします。ただし、strict モードの場合は、TypeError の Fatal エラーがトリガーされます。

強制モード:

<?phpfunction foo($a) : int{    return $a;}foo(1.0);
ログイン後にコピー

上記のコードは正常に実行でき、foo 関数はエラーなしで int 1 を返します。

厳密モード:

<?phpdeclare(strict_types=1);function foo($a) : int{    return $a;}foo(1.0);# PHP Fatal error:  Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6
ログイン後にコピー

宣言後、致命的なエラーがトリガーされます。

js の strict モードに似ていますか?

3. スカラー型宣言

PHP 7 の関数の仮パラメータ型宣言はスカラーにすることができます。 PHP 5 では、クラス名、インターフェイス、配列、または呼び出し可能なもののみにすることができます (PHP 5.4 では、匿名関数を含む関数にすることもできます)。文字列、int、float、bool も使用できるようになりました。

公式の例:

<?php// Coercive modefunction sumOfInts(int ...$ints){    return array_sum($ints);}var_dump(sumOfInts(2, '3', 4.1));
ログイン後にコピー

上記の厳密モードの問題がここでも適用されることに注意してください。強制モード (デフォルトでは強制型変換) では、依然としてパラメーターが適用されます。予想される要件を満たさないものは強制的に入力され、厳密モードでは TypeError 致命的エラーがトリガーされます。

4. バッチ宣言を使用する

PHP 7 では、複数のクラス、関数、または const を 1 つの文で宣言できます。

<?phpuse some\namespace\{ClassA, ClassB, ClassC as C};use function some\namespace\{fn_a, fn_b, fn_c};use const some\namespace\{ConstA, ConstB, ConstC};
ログイン後にコピー

ただし、次のように記述する必要があります。各クラス、関数、または const の名前 (Python のような * インポートからの方法はありません)。

注意すべき質問は次のとおりです。composer と PSR-4 に基づくフレームワークを使用している場合、この記述方法はクラス ファイルを正常にロードできますか?

5. その他の機能

その他の機能については個別に紹介しませんので、興味のある方は公式ドキュメントをご覧ください:

http://php .net/manual/en/migration70.new-features.php

いくつか簡単に説明します:

  • PHP 5.3 には匿名関数があり始めましたが、現在は以下の関数があります。匿名クラス;

  • define は定数配列を定義できるようになりました。

  • クロージャーは

  • を追加しました。

    ジェネレーター (より適切にはイテレーター) は最終的な戻り値 (return) を持つことができ、または yield from の新しい構文を通じて別のジェネレーター (ジェネレーター デリゲート) に入ることができます。

ジェネレーターの 2 つの新しい機能 (return と yield from) を組み合わせることができます。特定の外観を自分でテストできます。 PHP 7 は現在 RC5 であり、最終バージョンは間もなく公開される予定です。

最後にちょっとした広告:

5pyJ5oSP57uE5bu65LiA5Liq5LiN5rC055qEUEhQ55qEUVHnvqTvvJozMDU2MTEwODjvvIzmrKLov47liqDlhaXjgII=

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート