[PHP] タイプヒンティング (Type Hinting)

PHP5よりタイプヒンティング(Type Hinting) が導入された。関数の定義時にタイプヒンティングを使うことにより 関数が受け取ることのできる引数を限定することができる。

実際に試してみる

<?php
// CLSクラス(またはCLSを継承したクラス)のオブジェクトのみ受け付ける
function CLS_only(CLS $arg){
  var_dump($arg);
}
// stdClassのインスタンスのみ通る。CLSクラスは通らない
function stdClass_only(stdClass $arg){
  var_dump($arg);
}
// 配列ならOK
function array_only(array $arg){
  var_dump($arg);
}
// これは?
function string_only(string $arg){
  var_dump($arg);
}

class CLS{} $cls = new CLS;
CLS_only($cls);

$stdcls = new stdClass;
stdClass_only($stdcls);

$arr = array();
array_only($arr);

$str = "STRING";
string_only($str); // エラー
?>

結果

object(CLS)#1 (0) {
}
object(stdClass)#2 (0) {
}
array(0) {
}

Fatal error:  Argument 1 passed to string_only() must be
 an object of class string, called in *** on line 26
 and defined in *** on line 20

タイプヒンティングが使えるのは 特定クラスのオブジェクト & 配列の2つのみ (PHP5.1)。function(string $arg) と指定した場合はstringクラスのインスタンスのみ通る(つまり class string{} function(new string); とやると通る)。オブジェクトのタイプヒンティングについてはphp-class2/#object-argumentを参照

Share
関連記事