ホームページ >バックエンド開発 >PHPチュートリアル >php7 で使用されるいくつかの新機能の概要
composer と PSR-4 に基づくフレームワークを使用している場合、この書き方でクラス ファイルを正常に読み込むことができますか?実際、それは可能です。composer によって登録された 自動読み込み メソッドは、クラスが呼び出されたときに、クラスの 名前空間 に従って場所を検索します。この書き方には影響しません。
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 モードを使用する宣言ディレクティブである strict_types が追加されています。
戻り値の型宣言を使用する場合、厳密モードで宣言されていない場合、戻り値が期待される型でない場合でも、PHP はそれに対してキャスト型変換を実行します。ただし、strict モードの場合は、TypeError の Fatal エラーがトリガーされます。
強制モード:
<?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 致命的なエラー: キャッチされません TypeError: foo() の戻り値は、test.php:6 で返される整数型、浮動小数点型である必要があります
宣言後、致命的なエラーがトリガーされます。
js の strict モードに似ていますか?
3. スカラー型宣言
PHP 7 の関数の仮パラメータ型宣言はスカラーにできるようになりました。 PHP 5 では、クラス名、インターフェイス、配列、または呼び出し可能なもののみにすることができます (PHP 5.4 では、匿名関数を含む関数にすることもできます)。文字列、int、float、bool も使用できるようになりました。
公式例:
<?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));
上記の厳密モードの問題がここにも当てはまることに注意してください: 必須モード (デフォルト、強制型変換) では、期待を満たさないパラメーターは依然として強制的に型変換されます。厳密モードでは、致命的な 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 によって登録されたオートロード メソッドは、クラスが呼び出されたときにクラスの名前空間に従って場所を検索します。この書き方は影響しません。
5. その他の機能
その他の機能を一つずつ紹介するつもりはありません。興味があれば公式ドキュメントを確認してください
いくつか簡単に説明します:
PHP 5.3 では匿名が始まりました。
関数が再び追加されました;
define は定数配列を定義できるようになりました;
以上がphp7 で使用されるいくつかの新機能の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。