これは非常に便利だと思うので最初に置きます。使用法:
$a = $_GET['a'] ?? 1;
これは次と同等です:
<?phpif (empty($_GET['a'])) $a = 1;
三項演算子は次のように使用できることがわかっています:
$a ?: 1
しかし、これはベースですon $a が定義済みであることを前提とします。新しい ?? 演算子により判断が簡略化されます。
公式ドキュメントで提供される例 (辺の長さのパラメーター構文は 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 モードに似ていますか?
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 致命的エラーがトリガーされます。
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 に基づくフレームワークを使用している場合、この記述方法はクラス ファイルを正常にロードできますか?
その他の機能については個別に紹介しませんので、興味のある方は公式ドキュメントをご覧ください:
http://php .net/manual/en/migration70.new-features.php
いくつか簡単に説明します:
PHP 5.3 には匿名関数があり始めましたが、現在は以下の関数があります。匿名クラス;
define は定数配列を定義できるようになりました。
クロージャーは
ジェネレーター (より適切にはイテレーター) は最終的な戻り値 (return) を持つことができ、または yield from の新しい構文を通じて別のジェネレーター (ジェネレーター デリゲート) に入ることができます。
ジェネレーターの 2 つの新しい機能 (return と yield from) を組み合わせることができます。特定の外観を自分でテストできます。 PHP 7 は現在 RC5 であり、最終バージョンは間もなく公開される予定です。
最後にちょっとした広告:
5pyJ5oSP57uE5bu65LiA5Liq5LiN5rC055qEUEhQ55qEUVHnvqTvvJozMDU2MTEwODjvvIzmrKLov47liqDlhaXjgII=