ホームページ > バックエンド開発 > PHPチュートリアル > PHPの各バージョンにおける関数の型宣言を詳しく解説

PHPの各バージョンにおける関数の型宣言を詳しく解説

jacklove
リリース: 2023-04-02 08:14:01
オリジナル
1645 人が閲覧しました

この記事では、さまざまなバージョンの 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. Class/Interface

  2. self。これは独自のメソッドでのみ使用できます。

  3. array

  4. bool

  5. ##callable

  6. ##int
  7. float
  8. string
  9. ##iterable

  10. リストには boolean 型と double 型が含まれていないことに注意してください。これら 2 つの型を定義しない限り、パラメータや戻り値でこれらを使用することは間違っています。
これは、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 を使用して並べ替えられた配列内の数値の出現数を数える方法の説明


PHP は ffmpeg を呼び出してビデオのスクリーンショットを撮り、スクリプトを結合します

##Yii2 のシナリオと検証ルールの詳細な説明


#

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート