ホームページ  >  記事  >  バックエンド開発  >  PHP 7.2 新機能: パラメーターの型宣言 (コード付き)

PHP 7.2 新機能: パラメーターの型宣言 (コード付き)

不言
不言オリジナル
2018-08-08 16:55:346093ブラウズ

php7.2 バージョンには、より良いコードを作成できるようにする新機能、機能、改善が加えられています。次の記事では、php7.2 の新機能であるパラメータの型宣言について紹介します。言うことは多くありません。テキストの内容を詳しく見てみましょう。

パラメータ型宣言

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 以降、名前空間をグループ化する際に末尾のカンマを使用できるようになりました。

おすすめ関連記事:

PHP5.5 ~ PHP7.2 新機能集 - 個人記事

PHP7.2 バージョンパフォーマンス紹介

PHP7.2 の新機能

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。