システム開発ブログ/ 産業システム部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ シェア

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

PHPの動的型変数の比較に注意!!

小原
小原 (2010年5月13日 17:15)
産業システム部 / PHP

PHPプログラムを始めた頃、
最もやっかいであると思ったのが変数の値の比較でした。

以下のサンプルコードをご覧下さい。

  // 変数の宣言
  $number = 1;
  if ($number == "1") {
     // Aの処理
  } else {
     // Bの処理
  }

上記ケースの場合、
[Aの処理]と[Bの処理]ではどちらが実行されるでしょうか?

おそらく、PHPで開発をしたことがない方は
数値型の値を持つ$numberと、文字型の"1"は異なるため、
Bの処理が実行されると考えると思います。

ところが、実際はAの処理が実行されます。

PHPは動的型言語のため、
変数にセットした値が数値型で、比較先が文字型でも
厳密なチェックを行わず同一であると判断するようです。

JAVAだったら、コンパイルの時点でエラーが発生するのに、
PHPは実行時にエラーにもならないし、
上記のような判断を行います。

上記サンプルにおいて、[Aの処理]を実行させるためには、
is_string($変数)などの変数の型をチェックする関数を組み合わせるか、
比較演算子は、[ == ]ではなく、[ === ]を使って厳密にチェックをすることで
対応可能です。

  // 変数の宣言
  $number = 1;
  if ($number === "1") {
     // Aの処理
  } else {
     // Bの処理
  }
※上記の場合ならば、[Bの処理]が実行される。

動的型は、便利である反面よく理解して使用しないと
上記のようなバグを生み出す原因となるため、
注意しましょう。

「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  Facebook のファンページ

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。