待望のPHPメソッドパラメータの型制約が登場

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

この記事では、PHP のメソッド パラメーターの型制約について紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

待望のPHPメソッドパラメータの型制約が登場

PHP メソッド パラメーターに関する前回の記事では、PHP メソッド パラメーターに関するいくつかのヒントについて説明しました。今日は、PHP のメソッドのパラメーターの種類についてさらに詳しく説明します。

PHP5 以降、PHP はメソッド パラメーターの型制約を正式に導入しました。つまり、メソッドパラメータの型が指定されている場合、異なる型のパラメータを渡すとエラーが発生します。 PHP マニュアルでは、メソッドの型制約はクラス、インターフェイス、配列、または呼び出し可能なコールバック関数に限定されています。デフォルト値の NULL が指定されている場合は、パラメーターとして NULL を渡すこともできます。

class A{}
function testA(A $a){
    var_dump($a);
}

testA(new A());
// testA(1); 
// Fatal error: Uncaught TypeError: Argument 1 passed to testA() must be an instance of A, int given,
ログイン後にコピー

この例では、パラメーターの型をクラス A として定義したため、スカラー型を渡すと、エラー メッセージが直接返されます。

function testB(int $a){
    var_dump($a);
}
testB(1);
testB('52aadfdf'); // 字符串强转为int了
// testB('a');
// Fatal error: Uncaught TypeError: Argument 1 passed to testB() must be of the type int, string given

function testC(string $a){
    var_dump($a);
}
testC('测试');
testC(1);  // 数字会强转为字符串
// testC(new A()); 
// Fatal error: Uncaught TypeError: Argument 1 passed to testC() must be of the type string
ログイン後にコピー

スカラー型では型制約を使用できないことがマニュアルに明記されています。しかし、実際に使用することはできますが、すべてがスカラー型である場合、相互に変換する必要が生じ、適切な制約の役割を果たせなくなります。たとえば、上記の例では、int 型と string 型が強制的に相互に変換されます。

非スカラー型が指定された場合、エラーが報告されます。これがこの記事の焦点です。皆さん、一線を引いてください。実は、パラメータの型を固定スカラー型で指定したい場合、パラメータで指定するのは得策ではなく、メソッド内で別の型判定を行うのがベストです。

また、パラメータに強制的な転送があると、メソッド内部の判定に偏りも生じます。

最後に、インターフェイスと匿名メソッドの型制約を見てみましょう。匿名パラメータ型は、Laravel などのフレームワークで非常に一般的です。

// 接口类型
interface D{}
class childD implements D{}
function testD(D $d){
    var_dump($d);
}
testD(new childD());

// 回调匿名函数类型
function testE(Callable $e, string $data){
    $e($data);
}
testE(function($data){
    var_dump($data);
}, '回调函数');
ログイン後にコピー

テスト コード:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/%E5%85%B3%E4%BA%8EPHP%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%E7%BA%A6%E6%9D%9F.md
ログイン後にコピー

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

以上が待望のPHPメソッドパラメータの型制約が登場の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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