[PHP]引数にint又はnullを許容する関数を作る(タイプヒンティング、PHPDocコメント)

カテゴリ: PHP

PHPで、渡されたパラメータの型がintまたはnullであることを、スクリプトで表明するための表記方法です。

php 7.1の場合

php 7.1では、null許容型が用意されているので、"?int"のような指定方法が可能です。

public function someFunc(?int $param) {
    ...
}

以下のコードは、int値を指定する、nullを指定する、省略するの3つが可能です。
省略したときは、-1が指定されたとみなされます。

public function someFunc(?int $param = -1) {
    ...
}

ちなみに、TypeScriptやc#でのnull共用型の書き方は下記のとおりです。phpとは"?"を書く場所が異なるので注意が必要です。

SomeFunc(int? param)

php 7.0の場合

nullを許容することをデフォルトパラメータを記述るするところに記載する定義方法なので、nullを許容するが、省略不可なパラメータは

public function someFunc(int $param = null) {
    ...
}

php 5.xの場合

php 5.xの場合、タイプヒンティングの型指定として、intがそもそも指定できません。
以下のような形で、PHPDocの形式でデータ型の説明をしておくのが望ましいですが、phpインタプリタはPHPDocの定義をもとに動作するわけではありません。
ですので、someFunc("abc")といった処理を書いても関数呼び出しエラーにさせることができないです。

/**
 * @param int|null $param
 */
public function someFunc($param = null) {
    ...
}

エラーにさせたい場合は、関数内で明示的なチェックが必要です。

public function someFunc($param = null) {
    if (!is_number($param)) {
        throw Exception("parameter errror");
    }
}

union_type

int|null $paramのような形で、複数の型を許容するパラメータ定義を可能にするという案がRFCに挙がっていますが、php7.1までの時点では採用されていません。

// PHP7.1までの環境では、このコードは動かないので注意
public function someFunc(int|null $param = -1) {
    ...
}

Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ
カテゴリ: PHP

コメントを残す

メールアドレスが公開されることはありません。