phpのタイプヒンティング

Post on 18-Jul-2015

105 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

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

top related