この記事では主にPHPの型制約の導入について紹介します。型制約はPHPのクラスメソッドと関数で実装できますが、パラメータで指定できるのはクラス、配列、インターフェイスの4つの型のみです。呼び出し可能。型とパラメータはデフォルトで NULL に設定できます。PHP はスカラー型や他の型を制約できません。
型制約は PHP クラスのメソッドと関数で実装できますが、パラメーターで指定できるのはクラス、配列、インターフェイス、呼び出し可能の 4 つの型のみです。PHP では、スカラー型やその他の型を制約できません。次の例:
コードは以下の通りです:
クラステスト
{
パブリック関数 test_array(array $arr)
{
print_r($arr);
}
パブリック関数test_class(Test1 $test1 = null)
{
print_r($test1);
}
パブリック関数 test_callable(callable $callback, $data)
{
call_user_func($callback, $data);
}
パブリック関数 test_interface(Traversable $iterator)
{
print_r(get_class($iterator));
}
パブリック関数 test_class_with_null(Test1 $test1 = NULL)
{
}
}
クラス Test1{}
$test = new Test();
//関数呼び出しのパラメータが定義されたパラメータの型と一致しない場合、キャッチ可能な致命的なエラーがスローされます。
$test->test_array(array(1));
$test->test_class(new Test1());
$test->test_callable('print_r', 1);
$test->test_interface(new ArrayObject(array()));
$test->test_class_with_null();
では、スカラー型を制約するにはどうすればよいでしょうか?
PECL 拡張ライブラリは、整数、浮動小数点数、ブール値、列挙型、および文字列型の制約を実装するための SPL タイプ拡張機能を提供します。
コードは次のとおりです:
$int = new SplInt (94);
試してください {
$int = '楽しみのために文字列値をキャストしてみます' ;
} catch (UnexpectedValueException $uve) {
echo $uve -> PHP_EOL ;
}
エコー $int ;
/*
実行結果:
整数ではない値
94
*/
SPL タイプは柔軟性とパフォーマンスをある程度低下させるため、実際のプロジェクトではよく考えてください。