ホームページ >バックエンド開発 >PHP7 >PHP7.2の新機能(パラメータの型宣言)

PHP7.2の新機能(パラメータの型宣言)

藏色散人
藏色散人転載
2019-11-11 13:51:263113ブラウズ

PHP 7.2 が正式にリリースされ、より良いコードを作成できるようにする新機能、機能性、改善が加えられました。この記事では、PHP 7.2 の最も興味深い言語機能のいくつかであるパラメーターの型宣言を紹介します。

推奨: "PHP7 チュートリアル "

パラメータ型宣言

PHP 5 以降では、次の関数を宣言できます。渡されることが予想されるパラメータのタイプを指定します。指定された値の型が正しくない場合、PHP はエラーをスローします。パラメーターの型宣言 (型ヒントとも呼ばれます) は、関数またはクラス メソッドに渡されることが予想される変数の型を指定します。

例を見てみましょう:

class MyClass {
    public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $myclass){
    return $myclass->var;
}
echo test($myclass);

このコードでは、テスト関数には MyClass のインスタンスが必要です。データ型が正しくないと、次の致命的なエラーが発生します。

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8

PHP 7.2 以降、型ヒントはオブジェクト データ型で使用できるようになり、この改善により、汎用オブジェクトを関数またはメソッドのパラメーターとして宣言できるようになりました。以下に例を示します。

class MyClass {
    public $var = '';
}
class FirstChild extends MyClass {
    public $var = 'My name is Jim';
}
class SecondChild extends MyClass {
    public $var = 'My name is John';
}
$firstchild = new FirstChild;
$secondchild = new SecondChild;
function test(object $arg) {
    return $arg->var;
}
echo test($firstchild);
echo test($secondchild);

この例では、テスト関数を 2 回呼び出し、各呼び出しで異なるオブジェクトを渡します。以前の PHP バージョンではこれは不可能でした。

オブジェクトの戻り値の型宣言

パラメーターの型宣言で関数パラメーターの予期される型を指定する場合、戻り値の型宣言は戻り値の予期される型を指定します。

戻り値の型宣言は、関数によって返されることが期待される変数の型を指定します。

PHP 7.2 以降、オブジェクトのデータ型に対して戻り値の型宣言を使用できるようになりました。以下に例を示します。

class MyClass {
    public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $arg) : object {
    return $arg;
}
echo test($myclass)->var;

以前の PHP バージョンでは、次の致命的なエラーが発生します。

Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10

もちろん、PHP 7.2 では、このコードは「Hello World」で応答します。

パラメータ タイプの猶予ステートメント

PHP では現在、サブクラスとその親クラスまたはインターフェイスの間でパラメータ タイプの違いを許可していません。それはどういう意味ですか?

次のコードを考えてみましょう:

<?php
class MyClass {
    public function myFunction(array $myarray) { /* ... */ }
}
class MyChildClass extends MyClass {
    public function myFunction($myarray) { /* ... */ }
}

ここでは、サブクラスのパラメータの型を省略しています。 PHP 7.0 では、このコードにより次の警告が生成されます。

Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8

PHP 7.2 以降、コードを中断することなくサブクラス内の型を省略することができます。この提案により、すべてのサブクラスを更新しなくても、ライブラリ内の型ヒントを使用できるようにクラスをアップグレードできるようになります。

リスト構文の末尾のカンマ

配列の最後の項目の後の末尾のカンマは、PHP では有効な構文です。場合によっては、新しい項目を簡単に追加したり、欠落によるエラーを回避したりできます。カンマは解析エラーの原因となるため、使用することをお勧めします。 PHP 7.2 以降、名前空間をグループ化する際に末尾のカンマを使用できるようになりました。

この RFC といくつかのコード例の詳細については、「リスト構文の末尾のカンマ」を参照してください。

以上がPHP7.2の新機能(パラメータの型宣言)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。