phpのタイプヒンティング
TRANSCRIPT
PHPのタイプヒンティングを使う
2015/03
RW社内勉強会用
岡本秀高
できること
タイプヒンティングを使うと、
「意図しない引数」を事前に弾くことができる。
タイプヒンティングとは?
タイプヒンティングとは?
関数の引数の「型」を明示すること。
意図しない型の引数によるエラーを
防ぐことができる。
*PHP5から導入された
例えばこれが・・・
$array = [1,2,3,4];
normal($array);
function normal($array){
if(is_array($array)){
foreach ($array as $key => $value) {
echo $value;
}
}
}
こうなる
$array = [1,2,3,4];
normal($array);
function normal(array $array){
foreach ($array as $key => $value) {
echo $value;
}
}
DIFF
$array = [1,2,3,4];
normal($array);
function normal($array){
if(is_array($array)){
foreach ($array as $key => $value) {
echo $value;
}
}
}
$array = [1,2,3,4];
normal($array);
function normal(array $array){
foreach ($array as $key => $value) {
echo $value;
}
}
消えた「IS_ARRAY()」
タイプヒンティングを使えば、
関数を呼び出した段階で
型判定が行われる。
配列以外を渡してみる
$array = 1;normal($array);
function normal($array){
if(is_array($array)){
foreach ($array as $key => $value) {
echo $value;
}
}
}
$array = 1;normal($array);
function normal(array $array){
foreach ($array as $key => $value) {
echo $value;
}
}
配列以外を渡してみた結果
何も起きない Fatal Error
エラー内容を読む
Catchable fatal error:
Argument 1 passed to normal()
must be of the type array,
integer given,
エラー内容を読む
Catchable fatal error:
Argument 1 passed to normal()
must be of the type array,
integer given,
→配列が欲しいのに数字が来た(憤怒)
エラー内容を読む
Catchable fatal error:
Argument 1 passed to normal()
must be of the type array,
integer given,
→配列が欲しいのに数字が来た(憤怒)
タイプヒンティングのメリット
・タイプヒンティングのFatalErrorはキャッチ可能
・「関数コール時にコケる」から原因の特定が楽
・「この型以外の引数を渡すな」という無言の圧力
・型判定のためのif分岐をなくしてコードの簡略化
TRY IT!
・タイプヒンティング (クラスとオブジェクト) - PHPプロ!マニュアル :
http://www.phppro.jp/phpmanual/php/language.oop5.typehinting.html
・PHP: タイプヒンティング - Manual :
http://php.net/manual/ja/language.oop5.typehinting.php
・初心者向けタイプヒンティングとはなんなのかというお話 :
http://dekokun.github.io/posts/2013-12-14.html