Javaではメソッドの引数に必ず引数の型を指定する必要がありますが、PHPでもPHP5以降、関数とメソッドに対して引数の型を指定することが出来ます。
これによりメソッド呼び出しの時点で不正な呼び出しをチェックすることができ、メソッドの頭に毎回引数チェックを書く必要がなくなります。
ただ、最初に最大の問題点を挙げておくと、タイプヒンティングの指定がarray型とObject型しか使えないということです。
どうしてfunction func(string $str)ってできないんだよ……
とりあえず簡単な例。
hinting_test.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//適当なクラス
class hinting_test{
function hinting_array(array $arr){
return true;
}
}
//引数
$arg1=array('1','2');
$arg2='1,2';
$hint=new hinting_test();
$hint->hinting_array($arg1);
// $hint->hinting_array($arg2); //ここでCatchable fatal error発生
|
hinting_test::hinting_array()の引数にarrayを指定しているため、array以外の引数を渡すとエラーが発生します。
どうしてExceptionじゃないのかは謎ですが、これでJavaのように引数レベルで型を制御することができます。
ただしJavaで言うところのオーバーロードは使用できません。
function hinting_array(array $arr){}
function hinting_array(object $arr){}
と書くとredeclareエラーになります。
まったくもってどうでもいいんですが、長い間「タイプヒンディング」だと思っていました。
謎。
PR
トラックバック
トラックバックURL: