>100 Views
March 03, 15
スライド概要
PHPのタイプヒンティングについてざっと調べた内容を、社内勉強会向けにまとめました。
Developer
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]; $array = [1,2,3,4]; normal($array); normal($array); function normal($array){ function normal(array $array){ if(is_array($array)){ foreach ($array as $key => $value) { foreach ($array as $key => $value) { echo $value; echo $value; } } } } }
消えた「IS_ARRAY()」 タイプヒンティングを使えば、 関数を呼び出した段階で 型判定が行われる。
配列以外を渡してみる $array = 1; $array = 1; normal($array); normal($array); function normal($array){ function normal(array $array){ if(is_array($array)){ foreach ($array as $key => $value) { foreach ($array as $key => $value) { echo $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