ホームページ > バックエンド開発 > PHPの問題 > メソッドパラメータの型宣言を学ぶ方法

メソッドパラメータの型宣言を学ぶ方法

醉折花枝作酒筹
リリース: 2023-03-10 19:42:02
転載
2269 人が閲覧しました

この記事ではメソッドのパラメータの型宣言の学習方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

メソッドパラメータの型宣言を学ぶ方法

#どのような業界に従事しているとしても、特にプログラマーである私たちにとっては、生きて学ぶことがトレンドになっています。今回は新しい技術が適用できないのは当然ですが、このメソッドパラメータの型宣言など、PHPのドキュメントを読んだだけではよくわからない知識がたくさんあります。

前回の記事では、PHP のメソッド パラメーターの型制約について、メソッド パラメーターの型制約はクラス、インターフェイス、配列、または呼び出し可能なコールバック関数に限定されると述べましたが、実際にはこれは厳密ではありません。 PHPにも厳密モードの定義があり、厳密モードを指定する場合はメソッドパラメータの型に通常のスカラー型を指定することも有効です。

厳密モー​​ドの定義:

declare (strict_types = 1);
ログイン後にコピー

int 型

function testInt(int $a)
{
    echo $a, PHP_EOL;
}

testInt(1);
// testInt(1.1); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int
// testInt('52AABB'); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int
// testInt(true); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int
ログイン後にコピー

厳密モー​​ドでは、このメソッドのパラメータは受信後にのみ使用できることは明らかです。 int型の値は受け取れません、それ以外の型は受け付けられません もちろん、前回の記事で述べたような強制変換は発生しません。

float 型

function testFloat(float $a)
{
    echo $a, PHP_EOL;
}

testFloat(1);
testFloat(1.1);
// testFloat('52AABB'); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int
// testInt(true); // Fatal error: Uncaught TypeError: Argument 1 passed to testInt() must be of the type int
ログイン後にコピー

PHP には int と float しかなく、float は int のスーパーセットであるため、ここでは整数を渡すことができることに注意してください。 , 上記のtestInt(int $a)は1.1などのfloat値を受け取ることができません。これにはアップコンバージョンとダウンコンバートの問題が関係しており、スーパーセットへの変換は問題ありませんが、スーパーセットからサブセットへの変換は問題ありません。

文字列型

function testString(string $a)
{
    echo $a, PHP_EOL;
}

// testString(1);  // Fatal error: Uncaught TypeError: Argument 1 passed to testString() must be of the type string
// testString(1.1);  // Fatal error: Uncaught TypeError: Argument 1 passed to testString() must be of the type string
testString('52AABB');
// testString(true); // Fatal error: Uncaught TypeError: Argument 1 passed to testString() must be of the type string
ログイン後にコピー

あまり説明する必要はありませんが、非厳密モードでは、文字列型の受信パラメータを定義すると、実際にはどのような型でも構いません。文字列型として受け取られるので、ここで型変換について語る必要はなく、非厳密モードで文字列型を定義した場合の効果は何も定義しない場合と同じであると言えます。ただし、厳密モードでは異なり、実際には二重引用符または一重引用符で囲まれた文字列コンテンツのみを受け取ることができます。

bool type

function testBool(bool $a)
{
    var_dump($a);
}
testBool(true);
testBool(false);
// testBool('52AABB'); // Fatal error: Uncaught TypeError: Argument 1 passed to testBool() must be of the type bool
// testBool(1); // Fatal error: Uncaught TypeError: Argument 1 passed to testBool() must be of the type bool
ログイン後にコピー

ブール値についても同様で、ここでは true と false のキーワードの値のみを受け取ることができます。

新しい反復可能型を学ぶ

最後に、新しいやつを紹介しましょう。通常モードのクラス、配列、コールバック関数に加えて、厳密モードのさまざまなスカラー型mode 宣言の他に反復可能な型の宣言もありますが、この言葉からも分かると思いますが、反復可能な型です。

function testIterable(iterable $iterator)
{
    echo gettype($iterator), ':', PHP_EOL;
    foreach ($iterator as $it) {
        echo $it, PHP_EOL;
    }
}

testIterable([1, 2, 3]);
testIterable(new ArrayIterator([1, 2, 3]));
// Generator对象
testIterable((function () {
    yield 1;
    yield 2;
    yield 3;
})());
// testIterable(1); // Fatal error: Uncaught TypeError: Argument 1 passed to testIterable() must be iterable
ログイン後にコピー

はい、配列、イテレータ インターフェイスを実装するクラス、ジェネレータ関連のコンテンツが含まれています。つまり、foreach で反復できる内容はすべて渡すことができます。ジェネレーター自体は Generator オブジェクトになります。PHP ジェネレーターの使用方法の学習に関するこの記事で、この Generator オブジェクトの内容をすでに見てきましたが、このオブジェクト自体も Iterator インターフェイスを実装しています。

まとめ

冒頭でも触れましたが、厳密モードでは文法が大きく異なることが分かり、今回は本当に勉強になりました。まだまだ私たちもまだまだですが、これからも注目して一緒に頑張っていただければ幸いです! !

テスト コード:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/%E5%86%8D%E6%AC%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%E5%A3%B0%E6%98%8E.php
ログイン後にコピー

推奨学習: php ビデオ チュートリアル

以上がメソッドパラメータの型宣言を学ぶ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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