PHP も他の言語 (OC、Java) と同様にパラメーターの型チェックを導入しています。ただし、PHP には配列とオブジェクトの 2 つの限定された型しかありません。文字列や整数などの限定された型はありません。パラメーターの型制限は、インターフェイス、抽象クラス、関数、メソッドのいずれであっても、バージョン 5.3 以降で使用できますが、現在宣言できるのは配列オブジェクトのみです。
これの利点:
①: が可能です。調整されたコーディングでは、少なくともどのパラメータを渡すかを知るためにコメントやコードを見る必要はありません。
②: 受信オブジェクトの型宣言を使用します。
is_a -- オブジェクトの場合、受信オブジェクトが正当であるかどうかを識別するために関数内で is_a 関数を使用する必要はありません。クラスに属している、またはクラスがこのオブジェクトの親クラスは TRUE を返します
class User{ public $name; public $password; function __construct($name,$password){ $this->name=$name; $this->password=$password; } }//参数可以指定对象类型function f1(User $user){ echo $user->name,”,”,$user->password; }//参数可以指定数组类型function f2(array $arr){}//参数不可以指定基本类型,下面一句会出错function f3(string $s){}
わかりました、確認しましょう:
文字列が f1() 関数に渡されると、エラーが報告されます:
$a = 'xiaojun ';
$ret = f1($a);
エラー:
PHP キャッチ可能な致命的なエラー: f1() に渡される引数 1 は User のインスタンスである必要があります。指定された文字列、16 行目の /tmp/f921205b-ef87-4aa8-b715-a131af661abd/code で呼び出され、11 行目の /tmp/f921205b-ef87-4aa8-b715-a131af661abd/code で定義されています
エラーの説明は非常に明確です。 User のインスタンス化を関数オブジェクトに渡す必要があります。
これは正しいです:
// 实例化对象,并初始化$user_obj = new User("kaiyi", '123456');$ret = f1($user_obj);