PHP7 では、基盤となるエンジンのコードの大部分が変更され、さまざまな方法で PHP のパフォーマンスが向上したため、いくつかの新しい構文も PHP7 に追加されました。これらの構文の使用は、パフォーマンスの向上にも役立ちます。 php7でよく使われる新機能を整理してみましょう。
1. ?? 演算子 (NULL マージ演算子)
これは非常に便利だと思うので最初に置きました。使用法:
$a = $_GET['a'] ?? 1;
これは次と同等です:
<?php $a = isset($_GET['a']) ? $_GET['a'] : 1;
三項演算子は次のように使用できることがわかっています:
$a ?: 1
ただし、これはすでに定義されている $a に基づいています。前提。新しい ?? 演算子により判断が簡略化されます。
2. 関数の戻り値の型宣言
公式ドキュメントで提供されている例 (...
の辺の長さパラメータの構文はPHP 5.6 以降のバージョンでのみ利用可能):
<?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]));
この例から、関数 (匿名関数を含む) で戻り値の型を指定できるようになったことがわかります。
このステートメントの記述方法は、swift に似ています。
func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting }
この機能は、PHP の暗黙的な型変換によって引き起こされるいくつかの問題を回避するのに役立ちます。関数を定義する前に期待される結果について考えると、不要な間違いを避けることができます。
しかし、ここには注意が必要な機能もあります。 PHP 7 では、strict モードを使用する declare ディレクティブ strict_types
が追加されています。
戻り値の型宣言を使用する場合、それが厳密モードで宣言されておらず、戻り値が予期された型ではない場合でも、PHP はそれに対してキャスト型変換を実行します。ただし、厳密モードの場合は、TypeError
の致命的エラーが発行されます。
強制モード:
<?php function foo($a) : int { return $a; } foo(1.0);
上記のコードは正常に実行でき、foo 関数はエラーなしで int 1 を返します。
厳密モード:
<?php declare(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 では、クラス名、インターフェイス、array
または callable
のみにすることができます (PHP 5.4 では、匿名関数を含む関数にすることができます)。 string
、int
、float
、bool
も使用してください。
公式例:
<?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));
上記の厳密モードの問題がここにも当てはまることに注意してください。強制モード (デフォルト、両方とも強制型変換) では、依然としてエラーが発生します。に準拠していません。予期されたパラメータは type にキャストされ、厳密モードでは TypeError
致命的なエラーがトリガーされます。
4. バッチ宣言を使用する
PHP 7 では、複数のクラス、関数、または const を 1 つの文で宣言できます:
<?php 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};
しかし、それでも各クラス、関数、または const の名前を書き出す必要があります (Python のような import * メソッドからの
はありません)。
注意する必要がある質問は、composer と PSR-4 に基づくフレームワークを使用している場合、この記述方法でクラス ファイルを正常にロードできるかということです。実際には可能ですが、composer で登録したオートローディングメソッドは、クラス呼び出し時にクラスの名前空間に応じて場所を検索しますので、この書き方は影響しません。
上記の新機能に加えて、いくつか簡単に説明します:
PHP 5.3 は匿名関数を持ち始めましたが、現在は匿名クラスが存在します。現在定義されています 定数配列;
クロージャ (Closure) は呼び出しメソッドを追加します;
ジェネレータ (またはイテレータと呼ばれる方が適切です) は最終的な戻り値 (return) を持つことができます。 pass yield from から別のジェネレーター (ジェネレーター デリゲート) への新しい構文。
ジェネレーターの 2 つの新しい機能 (return と yield from) を組み合わせることができます。特定の外観を自分でテストできます。 PHP 7 は現在 RC5 であり、最終バージョンは間もなく公開される予定です。
おすすめ関連記事:
PHP7 新機能の紹介php7 の主な新機能について簡単に説明します。 php7 についての簡単な話以上がPHP7の新機能は何ですか? php7の共通新機能をまとめました。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。