3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

関数の引数で型のチェックを済ませる

3
Posted at

前提

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

使い方

sample.php
<?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に型のテストが載っていますので、
どのようにチェックを都合良くしているのかは使う前にご確認下さい。

あくまでも私の都合で作っているので、一般的に便利ではないのかも・・・

何かありましたらコメント下さい〜

3
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?