ホームページ  >  記事  >  バックエンド開発  >  PHP7+ では型宣言もサポートされているので、この機能についてお話しましょう。

PHP7+ では型宣言もサポートされているので、この機能についてお話しましょう。

青灯夜游
青灯夜游転載
2022-05-07 21:22:414592ブラウズ

PHP も型宣言に取り組み始めました。PHP7 では型宣言の機能が追加されました。次の記事では、PHP の型宣言の機能を理解し、戻り値の型宣言の落とし穴について説明します。みんなに役立つ!

PHP7+ では型宣言もサポートされているので、この機能についてお話しましょう。

最近、私は PHP7 の新機能を研究していて、PHP も型宣言を使い始めていることに気付きました。そうすることの利点は明白です。プログラムの実行速度を向上させます。

この新機能の紹介から始めましょう:

デフォルトでは、すべての PHP ファイルは弱い型チェック モードになっています。

PHP7 では型宣言の機能が追加されており、型宣言には次の 2 つのモードがあります:

  • 強制モード (デフォルト モード) 私の理解では、強制的に必須に変換 型は厳密には区別されませんが、強制的に変換されます 型が一致しない場合、エラーは報告されません
  • Strict モード 型を厳密に検証します。宣言されたものと矛盾している場合、エラーが報告されます

スカラー型宣言構文形式:

declare(strict_types=1);

strict_types の値:

    #1 は厳密な型チェック モードを示し、関数呼び出しと return ステートメントに適用されます。
  • 0 は弱い型チェック モードを示します
使用できる型パラメータは次のとおりです:

    string
  • int
  • float
  • bool
  • インターフェース
  • array
  • callable

#強制モード (デフォルト モード)

<?php

function sum(int ...$ints)
{
   return array_sum($ints);
}

print(sum(1, &#39;2&#39;, 3.1));
?>
上記のプログラムの実行出力は次のとおりです:

6

分析: 文字列型 '2' を整数型 2 に変換し、浮動小数点型 3.1 を整数型 3 に変換し、それらを加算して結果 6 を取得します。

Strict モード

<?php

declare(strict_types=1);

function sum(int ...$ints)
{
   return array_sum($ints);
}

print(sum(1, &#39;2&#39;, 3.1));
?>
上記のプログラムは strict モードを使用しており、第 2 引数が int 型ではないため、実行結果は次のようになります。 :

PHP 致命的エラー: キャッチされない TypeError: sum() に渡される引数 2 は、整数型、指定された文字列、呼び出し先の型である必要があります……

戻り値の型宣言PHP7 では、関数の戻り値の型を指定する戻り値の型宣言のサポートが追加されています。

宣言できる戻り値の型は次のとおりです:

string
  • int
  • float
  • bool
  • インターフェース
  • 配列
  • 呼び出し可能

私が踏んだ穴I本当にここにいます 穴をくぐると、新しいバージョンのphpstormでは戻り値の型に応じて戻り値の型宣言を追加するように案内するプロンプトコードが表示されるので追加しました。しかし、その後ビジネスの変更やコードの最適化により、戻り値のみを変更しました (たとえば、以前は配列を返しましたが、変更後は int を返しました)。戻り値の型宣言を変更するのを忘れていました (結局のところ、 PHP の弱い言語型に長年慣れていると、例外がスローされ、エラーが発生します。これが私が踏んだ落とし穴です。皆さん、使用する際には注意してください。

思考

GO 言語では、戻り値の型と戻り値の型宣言が同じであれば、上記の問題は発生しません。コンパイルが失敗すると、コンパイル中にエラーが報告されます。

PHP は弱い型指定言語であるため、戻り値の型宣言などの最適化が行われていますが、言語を実行する前にコンパイルする必要はなく、直接リリースして実行できます。 「コンパイルアラーム」が発生すると、PHPは実行中に直接例外をスローします。

#

<?php
declare(strict_types=1);

function returnIntValue(int $value): int
{
   return $value;
}

print(returnIntValue(5));
?>
上記のプログラム実行出力結果は次のとおりです: 5

戻り値の型宣言エラーの例

<?php
declare(strict_types=1);

function returnIntValue(int $value): int
{
   return $value + 3.0;
}

print(returnIntValue(1));
?>
上記プログラムはstrictモードを採用しているため、戻り値はintのはずですが、計算結果はfloatとなりエラーになります 実行出力結果は、 Fatal error: Uncaught TypeError: Return value of returnIntValue() は整数型、浮動小数点型である必要があります...

void function

注: 定義します。戻り値の型が void の関数 null を返す場合でも、戻り値は存在しません。

戻り値が void 型として宣言されているメソッドは、return ステートメントを完全に省略するか、空の return ステートメントを使用する必要があります。

Example

<?php
function exchange(&$left, &$right) : void
{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump(exchange($a, $b), $a, $b);
上記の出力結果例:

null int(2) int(1)

##元のアドレス: https://juejin.cn/post/7062942459247984648

著者: Wang Zhongyang Go

推奨学習: 「

PHP ビデオ チュートリアル」

以上がPHP7+ では型宣言もサポートされているので、この機能についてお話しましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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