phpのタイプヒンティング

15
PHP タイプヒンティングを使う 2015/03 RW社内勉強会用 岡本秀高

Upload: hidetaka-okamoto

Post on 18-Jul-2015

105 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: PHPのタイプヒンティング

PHPのタイプヒンティングを使う

2015/03

RW社内勉強会用

岡本秀高

Page 2: PHPのタイプヒンティング

できること

タイプヒンティングを使うと、

「意図しない引数」を事前に弾くことができる。

Page 3: PHPのタイプヒンティング

タイプヒンティングとは?

Page 4: PHPのタイプヒンティング

タイプヒンティングとは?

関数の引数の「型」を明示すること。

意図しない型の引数によるエラーを

防ぐことができる。

*PHP5から導入された

Page 5: PHPのタイプヒンティング

例えばこれが・・・

$array = [1,2,3,4];

normal($array);

function normal($array){

if(is_array($array)){

foreach ($array as $key => $value) {

echo $value;

}

}

}

Page 6: PHPのタイプヒンティング

こうなる

$array = [1,2,3,4];

normal($array);

function normal(array $array){

foreach ($array as $key => $value) {

echo $value;

}

}

Page 7: PHPのタイプヒンティング

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;

}

}

Page 8: PHPのタイプヒンティング

消えた「IS_ARRAY()」

タイプヒンティングを使えば、

関数を呼び出した段階で

型判定が行われる。

Page 9: PHPのタイプヒンティング

配列以外を渡してみる

$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;

}

}

Page 10: PHPのタイプヒンティング

配列以外を渡してみた結果

何も起きない Fatal Error

Page 11: PHPのタイプヒンティング

エラー内容を読む

Catchable fatal error:

Argument 1 passed to normal()

must be of the type array,

integer given,

Page 12: PHPのタイプヒンティング

エラー内容を読む

Catchable fatal error:

Argument 1 passed to normal()

must be of the type array,

integer given,

→配列が欲しいのに数字が来た(憤怒)

Page 13: PHPのタイプヒンティング

エラー内容を読む

Catchable fatal error:

Argument 1 passed to normal()

must be of the type array,

integer given,

→配列が欲しいのに数字が来た(憤怒)

Page 14: PHPのタイプヒンティング

タイプヒンティングのメリット

・タイプヒンティングのFatalErrorはキャッチ可能

・「関数コール時にコケる」から原因の特定が楽

・「この型以外の引数を渡すな」という無言の圧力

・型判定のためのif分岐をなくしてコードの簡略化

Page 15: PHPのタイプヒンティング

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