前提
PHPは他の言語より型のチェックが甘いと言われてきたが、
少しずつ厳格になる動きをここ最近感じています。
PHP7からは関数の引数でも様々な型をチェックできるようなるみたいです。
【PHPドキュメント】
http://php.net/manual/ja/functions.arguments.php#functions.arguments.type-declaration.types
厳格にした方が思わぬ動作を減らせるので、もちろん良いことだと思います。
今回はPHP5でも似たようなことができないか考えてみます。
PHP5でクラス名、self、配列とcallable(関数)のみですね。
intやboolなどは使えないため、関数の中で引数を漏れ無くチェックする必要があります。
今回は引数にクラス名を指定する方法を利用して、型のチェックをやってくれるクラスを
組んでみました。時には厳格過ぎない指定が出来た方がスムーズに進行することが多いので、
型のチェックだけではなく、簡単な型変換も含めています。自分が使いやすくしているだけなので
プロジェクトで使いたい方は一度プログラムを検証してくださいね。
ダウンロード
Gitにアップしておきましたので、興味のある方はどうぞ。
https://github.com/web-picker/Strict-Value
使い方
<?php
require_once("Strict_Value.php");
class Sample {
public function calculate( Int $a, Int $b )
{
if( $a->is_valid() && $b->is_valid() )
{
echo $a->get() + $b->get();
}
}
}
$a = new Int();
$b = new Int();
$a->set("100");
$b->set("100");
$sample = new Sample();
$sample->calculate( $a, $b );
// result 200
ちょっとめんどくさい気もしますが、一応こんな感じです。
is_validメソッドで値の型が正しいかどうかをチェックし、
正しい場合はgetメソッドで取得できます。
setメソッドで値を設定した際に型のチェックが行われます。
もし型に問題があった場合は、エラーを発生させています。
エラーを発生させたくない場合は、STRICT_VALUE_DEBUG定数をFALSEにして下さいね。
定数の指定は、クラスファイルを読み込む前にしないといけません。
Gitに上がっているtest.phpに型のテストが載っていますので、
どのようにチェックを都合良くしているのかは使う前にご確認下さい。
あくまでも私の都合で作っているので、一般的に便利ではないのかも・・・
何かありましたらコメント下さい〜