PHPでヒントを入力します

Joseph Gordon-Levitt
リリース: 2025-02-28 08:53:14
オリジナル
839 人が閲覧しました

Type Hinting in PHP

キーポイント

  • PHPのタイププロンプトにより、開発者は関数宣言のパラメーターの予想データ型を指定することで、コードの堅牢性と読みやすさが向上します。ただし、PHPのタイププロンプトは、文字列や整数などのスカラーデータ型をサポートしていません。
  • PHPは弱い型型言語です。つまり、データ型を宣言する必要はありません。 PHP 5.4でのスカラーPHPタイプのヒントの追加は議論の余地があり、反対者はこれがPHPの基本設計に反していると考えています。最初はサポートされていましたが、この機能はコミュニティの対応のためにPHP 5.4に入っていません。
  • PHPのタイプのヒントには制限がありますが、パラメーターがスカラータイプではない場合にこれを実現するために基本的な検証を実行できます。この場合、is_string()is_int()などの関数を使用して、エラーを上げたり、例外を投げたりすることができます。

PHP 5から始めて、型プロンプトを使用して、関数宣言で予想されるデータ型のパラメーターを指定できます。関数を呼び出すと、PHPはパラメーターが指定されたタイプであるかどうかを確認します。そうでない場合、ランタイムはエラーを上げて実行を停止します。有効なタイプには、受信オブジェクトのクラス名と受信アレイのarrayが含まれます。例は次のとおりです。

<?php
function enroll(Student $student, School $school) {
    echo "Enrolling " . $student->name . " in " . $school->name;
}
?>
ログイン後にコピー

PHP enroll()メソッドにどのような種類のオブジェクトを受け取ることを期待するかを伝えることにより、生徒が修道院や401Kプランではなく学校に登録されるようにすることができます。繰り返しますが、3年生の最初の日に頑固な貧困層が現れることはないことを知っています。メディケアに登録しようとするとどうなりますか?

<?php
$me = new Student("Amanda");
$medicare = new Program("Medicare");
$enroll = enroll($me, $medicare);
?>
ログイン後にコピー

私は学生ですが、次のエラーが発生します:

<code>Catchable fatal error: Argument 2 passed to enroll() must be an instance of School, instance of Program given, called in typehint.php on line 32 and defined in typehint.php on line 6</code>
ログイン後にコピー

パラメーターのデフォルト値として<cod>nullが使用されている場合、許可されます。これが例です。今回は配列を使用しています。

<?php
function startParty(array $guests, array $food = null) {
    // party stuff...
}
$guests = array("Susan Foreman", "Sarah Jane Smith", "Rose Tyler", "Donna Noble");
startParty($guests, null);
?>
ログイン後にコピー
ゲストがいる限り、食べ物があるかどうかに関係なくパーティーがあります。

タイプのヒントの制限

< 定義されたクラスは有効なタイプのプロンプトになりますが、PHPは一般的なオブジェクトのタイププロンプトをサポートしていません。他の状況はどうですか? PHPタイプのプロンプトの制限に関する特別な例は次のとおりです。

あなたは「何がクレイジーですか?私はあなたに文字列インスタンスを与えましたが、あなたはそれが問題ではないと不平を言いました!」これはよくあることです。実際、一見すると、これはかなり混乱するエラーメッセージになる可能性があります。

は文字列を探していませんが、文字列クラスの例を探しています。 PHPのタイププロンプトは、文字列や整数値などのスカラーデータ型をサポートしていません。しかし、それは大丈夫です!引数がスカラータイプ(文字列や整数など)ではない場合にエラーを上げたり、例外をスローする必要がある場合は、
<?php
function stringTest(string $string) {
    echo $string;
}
stringTest("definitely a string");
?>
ログイン後にコピー
<code>Catchable fatal error: Argument 1 passed to stringTest() must be an instance of string, string given, called in typehint.php on line 42 and defined in typehint.php on line 39</code>
ログイン後にコピー
などの関数を使用してこれを達成するために基本的な検証を実行できます。

stringTest()is_string()スカラー戦争is_int()

PHP 5.4にスカラーPHPタイプのプロンプトを追加することについてのいくつかの論争があります。変更の反対者は、このサポートがPHPの基本設計に違反すると考えています。 PHPは弱いタイプの言語と見なされます。基本的に、これはPHPではデータ型を宣言する必要がないことを意味します。変数はまだ関連付けられているデータ型に関連付けられていますが、エラーを引き起こすことなく整数に文字列を追加するなど、急進的なことをすることができます。 2010年5月、ScalarタイプのヒントのサポートがPHPバックボーンに追加されました。ただし、コミュニティの対応により、この機能はバージョン5.4に入りません。

概要

タイププロンプトは、オブジェクト指向プログラミングのためのPHPテクノロジーの導入です(特に、例外をキャッチするタイプを識別するため)。ここでオブジェクトの使用に関する詳細を読むことをお勧めします。カルロスE.サンタマリア /シャッターストックの写真写真

PHPタイプのヒントFAQ(FAQ)

PHPタイプのプロンプトの重要性は何ですか?

PHPのタイププロンプトは、開発者が関数宣言で予想されるデータ型のパラメーターを指定できる重要な機能です。関数が正しいタイプの数値を受信することを保証することにより、コードの堅牢性を高めます。これにより、コードのバグと脆弱性が少なくなり、信頼性が高くデバッグが容易になります。また、コードの読みやすさも向上し、他の開発者がコードの機能を理解しやすくなります。

PHPのすべてのデータ型にタイププロンプトを使用できますか?

PHPは、オブジェクト、配列、インターフェイス、呼び出し可能性、反復など、さまざまなデータ型のタイププロンプトをサポートしています。ただし、PHPはバージョン7.0までスカラー型プロンプト(int、float、string、bool)をサポートしていないことに注意してください。 PHP 7.0から始めて、すべてのデータ型にタイププロンプトを使用できます。

如果传递的参数的数据类型与类型提示不匹配会发生什么?

如果传递的参数的数据类型与函数声明中的类型提示不匹配,PHP 将抛出“致命错误”。此错误将停止脚本的执行,防止任何进一步的处理。这就是为什么必须确保将正确的数据类型传递给函数的原因。

PHP 类型提示如何与类继承一起工作?

在 PHP 中,类型提示可以与类继承一起使用。如果函数期望某个特定类类型的参数,它也将接受该类的子类的实例。这是因为子类是其父类的特定类型,因此满足类型提示。

我可以在 PHP 的内置函数中使用类型提示吗?

いいえ、PHPのタイププロンプトは、ユーザー定義の関数にのみ使用できます。タイププロンプトは、PHPの組み込み関数によってサポートされていません。ただし、これらの関数には、多くの場合、さまざまなデータ型を処理するための内部メカニズムがあります。

PHPタイプのプロンプトの厳格なパターンは何ですか?

PHPタイプインプロンプトのStrict Modeは、PHP 7.0で導入された機能です。 Strictモードが有効になっている場合、PHPはタイププロンプトに基づいてデータ型の正確な一致を強制します。渡されたパラメーターのデータ型がタイププロンプトと正確に一致しない場合、パラメーターを正しいタイプにキャストできる場合でも、PHPは「致命的なエラー」をスローします。

PHPで厳格モードを有効にする方法は?

PHPで厳密なモードを有効にするには、PHPファイルの上部で

を宣言する必要があります。このステートメントは、スクリプトの最初のステートメントでなければなりません。 declare(strict_types=1);

PHPタイプのプロンプトの弱いモードと厳密なモードの違いは何ですか?

PHPタイプのプロンプトの弱いモードと厳密なモードの違いは、PHPがタイプの不一致をどのように扱うかです。弱いモードでは、可能であれば、PHPは合格したパラメーターを正しいデータ型にキャストしようとします。対照的に、厳密なモードでは、PHPは値をキャストしようとせず、データ型が正確に一致しない場合、「致命的なエラー」がスローされます。

関数返品値にタイププロンプトを使用できますか?

はい、PHP 7.0から始めて、関数の戻り値にタイププロンプトを使用できます。この機能を使用すると、関数リターン値の予想データ型を指定して、コードの信頼性と読みやすさを向上させることができます。

PHPのNullable Typeプロンプトは何ですか?

Nullable Typeプロンプトは、PHP 7.1で導入された機能です。これにより、関数パラメーターを指定するか、指定されたタイプまたはnullであることを返す値を指定できます。タイプをプロンプトにするには、疑問符(?)を使用してタイプ名をプレフィックスします。たとえば、「?文字列」とは、値が文字列またはnullになる可能性があることを意味します。

以上がPHPでヒントを入力しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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