ホームページ  >  記事  >  バックエンド開発  >  PHPの各バージョンにおける関数の型宣言の詳細な説明

PHPの各バージョンにおける関数の型宣言の詳細な説明

小云云
小云云オリジナル
2018-01-15 10:00:081701ブラウズ

この記事は主に、PHP のさまざまなバージョンでの関数の型宣言の使用方法をまとめたものです。必要な方は参考にしていただければ幸いです。

PHP7 はスカラー型宣言のサポートを開始し、強く型付けされた言語の風味が比較的強くなります。この機能を使用しているときに 2 つの落とし穴に遭遇しました。1 回目は boolean を宣言するとき、そして最近では double を宣言するときです。今後同じような間違いをしないように、一度公式ドキュメントを読みました。この記事は、PHP 関数での型宣言の使用法を読んだ後にまとめたものです。

構文的には、PHP 関数定義はいくつかの時代を経てきました:

古代時代 (PHP 4)

関数の定義は、関数名(引数) {body} の構文宣言を使用することで非常に簡単です。パラメータと戻り値の型を指定することはできず、パラメータと戻り値の型には無限の可能性があります。これは、関数を宣言する最も一般的な方法です。

配列と参照型のパラメータ値の宣言 (PHP 5)

関数宣言では、配列、クラス、インターフェイス、関数 (呼び出し可能) を使用できます。 5.6 以降、定数 (クラス定数を含む) がデフォルトのパラメーターとしてサポートされ、パラメーター配列 (先頭に省略記号が付く) もサポートされます。例:


function sum(...$numbers) {
  $sum = 0;
  foreach ($numbers as $number) {
    $sum += $number;
  }
  return $sum;
}

注: パラメータの値が null の可能性がある場合は、パラメータのデフォルト値を null にする必要があります。そうしないと、呼び出し時にエラーが発生します。例:


function foo(array $arr = null) {
  ...
}

スカラー型と戻り値の宣言 (PHP 7)

関数はスカラー型 (int、bool、float など) と戻り値の型を正式にサポートします (宣言可能な型はパラメーターと同じです) ) 宣言。このバージョンから、PHP を書くのは Java を書くのと同じように感じられます。

残念ながら、関数の戻り値がnullになる可能性がある場合、戻り値の型を指定することはできません。例:


function getModel() : Foo {
  if ($this->_model === null) {
     $this->_model = xxxx; // get from db or otherelse
  }
  return $this->_model;   // 如果$this->_model仍是null,运行出错
}

パラメータと戻り値は null および void 戻り値の型宣言 (PHP 7.1)

パラメータと戻り値の型が null の可能性がある場合は、疑問符 (?) で型を変更します。 null 値の問題を解決するには (デフォルトのパラメーターと競合しません)、型宣言により反復可能が追加され、void 型の戻り値もサポートされます。例:


function getModel(?int $id) : ?Foo {
  if ($id !== null) {
    $this->_model = xxxx;
  } else {
    $this->_model = yyyy;
  }
  return $this->_model;
}
 
// 调用
$foo->getModel(null);
$foo->getModel(100);
 
// 函数声明了参数并且没有提供默认参数,调用时不传入参数会引发错误
// 将函数声明改成 getModel(?int $id = 100) {},可以不传参数
$foo->getModel();

関数の戻り値が void の場合、関数本体内で任意の型の後に return を続けることができないか、return ステートメントが表示されません。


function test(array $arr) : void {
  if (!count($arr) {
    return;
  }
 
  array_walk($arr, function ($elem) {xxxx});
}

上記の歴史を確認すると、PHP 7.1 の時点で、関数の型宣言が非常に完成されていることがわかります (ただし、実際にはあまり使用されていません)。

実際に遭遇する落とし穴について話しましょう。パラメーターと戻り値の型宣言に使用できる型は次のとおりです:

  1. array

  2. bool

  3. callable

  4. int

  5. float

  6. string

  7. iterable

  8. リストにはboolean型とdouble型が存在しないことに注意してください。これら 2 つの型を定義しない限り、パラメータや戻り値でこれらを使用することは間違っています。
  9. これは PHP の少し難しいところでもあります。通常使用される 2 つのキーワード double と float はほぼ同じです。たとえば、doubleval は floatval のエイリアス、is_double は is_float のエイリアスで、(double) と (float) は変換時に同じ効果を持ちます。しかし、型宣言に関しては、同じ状況が bool と boolean で発生します。


    概要

現在、PHP 7.2の安定版がリリースされており、新しいプロジェクトではできるだけPHP 7.1以降のバージョンを使用することをお勧めします。明確で保守しやすいコードを作成するには、宣言型を使用することをお勧めします。 null 値は参照型または文字列にのみ使用し、int/float などのスカラー型パラメーターには null を使用しないようにすることをお勧めします。必要な場合を除き、func_get_argc やその他の関数は使用しないようにしてください。

関連する推奨事項:

型制約を使用して PHP 関数の型を制限する方法

JavaScript 関数の関数型の概要

関数の型を判断するための Javascript の完璧なソリューション_JavaScript スキル

以上がPHPの各バージョンにおける関数の型宣言の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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