【初心者向け】PHPのis_numericは何をチェックする?|数値判定の留意点も説明!

PHPでもいろんなデータ型が定義されており、それに対応して、データ型を判定する関数が導入されています。
数値であるかを判定したいときに使うのがis_numeric関数です。
このis_numeric関数は、PHPでのデータ型の扱いの特性を反映しており、取り扱いに留意する必要があります。

ここでは、PHPでのデータ型の扱いおよびis_numeric関数を使う際の留意点を説明します。

PHPプログラミングに興味のある方は、プログラミング学習の参考として、ぜひ読んでみてください。

PHPのis_numeric関数は何を判定する?

PHPにおけるデータ型

PHP は 10 種類の基本型をサポートします。

データ型 種類 説明
論理値(bool) スカラー型 trueまたfalse
整数(int) スカラー型 10進数以外はプレフィックスをつける。
2進数:0b、8進数:0、16進数:0x
浮動小数点数(float、double) スカラー型 小数点数のほか、指数表現も可能。
文字列(string) スカラー型 シングルクォート(’)またはダブルクォート(”)で
囲まれた0文字以上の文字列
配列(array) 複合型 連想配列や多次元配列も含む
オブジェクト(object) 複合型 オブジェクトを定義
callable 複合型 コールバックをあらわす
iterable 複合型 イテレーターをあらわす
リソース(resource) 特別な型 外部リソースへの参照
ヌル(null) 特別な型 値なし(空)を示す

is_numeric関数はどの型を判定する?

上記のデータ型で数値というと、整数または浮動小数点数を思い浮かべる方が多いと思います。

PHPで数値かどうかの判定をする際に思いつくのがis_numeric関数ですが、実はこの関数は整数または浮動小数点数のほか、文字列のばあいにも”numeric”であるという判定結果を返します

データ型については以下の参考にしてください。

【初心者向け】PHPのintとは?基本概念や関連メソッドも解説します

PHPにおけるデータ型の扱いの特徴

変数の型宣言をしなくてもよい

PHPでの変数は、数値や文字列などいろんなデータを値として持つことができます。C言語やJava言語では、変数を宣言する際にその型を定義します。そして、プログラム内では、定義された型以外のデータを格納することはできません。

一方、PHPでは、変数を定義する際にはその型は不要です。つまり、変数にはどんな値でも格納できるのです。変数に文字列を入れれば変数の型はstring型になり、整数を入れればint型になります。

下記のように、変数を異なるデータ型の値で上書きすることができます。

暗黙的な型変換

PHPでは、プログラム内の各種演算処理などにおいて、必要に応じて自動で型を変換して処理してくれます。

すなわち、変数にセットされた値に応じて、データ型は自動的に変更されていることになります。

数値形式の文字列の扱い

PHP の 文字列では、その文字列が int や float と解釈できる場合は、文字列ではなく数値と見なされます

数値形式の文字列から始まり、その後に任意の文字が続くときの扱いは、PHPのバージョンによって扱いが異なります。

PHP8.0.0以前のバージョン
・E_WARNING ではなく、 E_NOTICE を発生。
・文字列が数値でない場合、 E_WARNING が発生し、 0 を返す。
・PHP 7.1.0 より前のバージョンでは、 E_NOTICE も E_WARNING もなし。
文字列 PHP8.0.0以降 それ以前
$foo = 1 + “10 Text” $fooの型は integer で値は11
E_WARNING
$fooの型は integer で値は11
E_NOTICE
$foo = 1 + “Text-1.3e3” TypeError $fooの型は integer で値は1
E_WARNING

PHPにおける型の扱いのメリット・デメリット

メリット
・型を意識することなくプログラミングできるので、初心者でも簡単にプログラムが書ける。
デメリット
・変数の型が明確でないため、想定外の型のデータの混入を防げない。
・上記のより思わぬバグを招くリスクがある。

利便性をとるか、簡便性をとるかの問題ですが、入力を受け付けるWEBシステムにおいては、できるだけ変数の型を意識した安全なプログラム作りを優先しようという声が強いです。

正規表現を使う方は以下も参考にしてください。

【PHP】文字列を正規表現で検索する関数の使い方を解説

データ型をチェックする関数

データ型をチェックする関数としては、各データ型に対応した関数is_xxx(xxxはデータ型)が用意されています。例えば、

  • is_bool()関数:変数が 論理型 boolean かどうか判定する
  • is_int()関数:変数が 整数型 integer かどうか判定する
  • is_float()関数:変数が 浮動小数点型 float かどうか判定する
  • is_string()関数:変数が 文字列型 string かどうか判定する
  • is_array()関数:変数が 配列型 array かどうか判定する

プログラムで扱う型が決まっている場合には、これらの関数を使って型チェックをするとよいでしょう。

そのほか数値として扱えるものか、スカラー型のデータであるかをチェックする関数が用意されています。

is_numeric

指定した変数が数値または 数値形式の文字列であるかどうかを調べます。

パラメータ

パラメータ 説明
value mixed 評価する変数

返り値

  • value が数値または 数値形式の文字列である場合true、それ以外の場合に false

 

is_scalar

指定した変数がスカラかどうかを調べます。

パラメータ

パラメータ 説明
value mixed 評価する変数

返り値

  • value がスカラ場合はtrue、それ以外の場合は falseを返します。
  • スカラ変数には int、float、string あるいは bool が含まれます。
  • array、object および resource はスカラではありません。

以下も参考にしてください。

これから学ぶ初心者必見!!プログラミング言語の違い

まとめ

いかがでしたか? 今回は、PHPで数値であるかをチェックするis_numeric関数を紹介しました。

PHPでは変数のデータ型を意識することなくプログラムが書けますが、便利な反面、思わぬバグを生む原因にもなりかねません

変数のデータ型をチェックする関数などを使ってプログラムではミスのないように気をつけましょう。

この記事が、PHPプログラミングの学習の参考としてお役に立てば幸いです。