MOMOYA.Labs 桃屋ラボ
最終更新日時
 2019年05月29日(Wed)
コンテンツ
    トップページ
  • VB
    • フォーム
    • コントロール
    • インターネット
  • C#
    • フォーム
    • ファイルシステム
    • データ統計
    • SQLite
  • VBA
    • Excel
    • Tips
  • PHP
    • 基礎
    • 文字列
    • ファイルシステム
    • 通信
    • PEAR
    • Twitter API
    • Tips
  • Ruby
    • Rubyを始めよう!
    • ファイルアクセス
    • ディレクトリ
    • Excel操作
  • Python
    • Pythonを始めよう!
  • OpenSocial
    • 各種情報
  • HTML&CSS
    • HTML5
    • CSS
    • iPhone向けサイト作成
    • HTML Tips
    • CSS Tips
  • Javascript
    • ウィンドウ関連
    • ナビゲーション
    • 便利なスクリプト
    • Tips
  • プログラム全般
    • .Net Framework
    • 数学?
    • その他
  • Oracle
    • Tips
    • 各種情報
  • DB2
    • Tips
  • MySQL
    • 開発で使いそうなSQL
    • メンテナンス
  • ネットワーク
    • デバイス
    • その他
  • Windows
    • Vista
    • Windows 7
    • IIS
    • Excel
    • 拡張
    • コマンドプロンプト活用
    • 不具合対応
    • ショートカットキー
    • Tips
  • Windows FreeSoft
    • ブラウザ(FireFox)
    • Web開発関連
    • グラフィック
    • プログラミング
    • SQL
    • VMware
    • プロジェクト管理
    • その他
    Mac
  • Linux&Unix
    • Kubuntu
    • Fedora
    • Debian
    • NetBSD
    • Tips
  • Linux Software
    • オンラインストレージ
  • インターネット知識
    • ホームページ作成
    • Javascriptで操作
    • アフィリエイト
    • ネットで見つけた面白いもん
    • 便利なサイト
    • 便利な活用方
    • Twitter
    • その他
  • iPhone
    • おすすめアプリ
    • Jailbreak
    • 検証
  • 雑記
    • ネットワーク関連
    • ハードウェア関連
    • セキュリティ関連
    • 読み方
    • 故障?保証対象?
    • その他
  • 雑記(IT・デジモノ以外)
    • 言葉の意味
    • 転職関連
    • その他
  • MOMOYA's FreeSoft
    • Keyboard Launchar
  • 個人的メモ
    • リンクメモ
    • ネタ
サイト内検索
Sponsored Link
プロフィール

名前:桃屋
歳/性別:20代/Male
生息地:東京都(23区内)
Sponsored Link
リンク(ジャンル別50音順|■ = 相互)
【 プログラム全般 】
■ MadCap ・ SQLの窓 ・ Wordpress初心者な技術屋の忘備録
【 VB,C# 】
・ C#,VB.NET入門 ・ DOBON.NET
【 PHP 】
・ phpspot ・ Smartyマニュアル ・ 忘れっぽいエンジニアのPHPリファレンス
【 API 】
・ Google Maps API リファレンス ・ Google MAPS APIプログラミング ・ Twitter API Viewer
【 HTML&CSS 】
・ Tag index
【 JavaScript 】
・ 432 + JavaScript Libraries ・ jsdo.it
【 その他のプログラミング言語 】
・ 逆引きPython ・ 逆引きRuby
【 プログラミング関連 】
・ 正規表現メモ
【 読み物 】
・ MSDN マガジン
【 Oracle 】
・ Oracle管理者のためのSQLリファレンス ・ 忘れっぽいエンジニアのORACLEリファレンス
【 Linux,UNIX 】
・ CentOSで自宅サーバー構築 ・ Fedoraで自宅サーバー構築 ・ FTP/理化学研究所 ・ Linuxコマンド逆引き大全 ・ Linuxで自宅サーバ
【 便利サイト 】
・ Wayback Machine
【 Webツール 】
・ .htaccess Editor ・ Convert C# to VB.NET ・ Convert VB.NET to C# ・ QRコード作成 ・ テキスト変換サービス
【 開業関連 】
・ プログラマーとSEのフリーランスのススメ
【 ブログ類 】
■ ぱんだぁにゃ ■ 元携帯屋店員がブログにちょうせん! ■ 日常気まぐれブログ
【 その他 】
・ 2018年 秋アニメ 一覧 ・ 2018年 夏アニメ 一覧 ・ 2018年 春アニメ 一覧 ・ アキバイズム
-> リンク一覧 
モバイルサイト
RSS 2.0
更新情報をRSSで取得!
アクセスカウンター


現在の閲覧者数:

設置日:2008年12月05日

[PHP-Tips] 比較を行う際の落とし穴

比較(==, !=, if, switch, in_array など)を行う際、大きな落とし穴が存在します。

例えば、まず以下のコードを実行した際、何が表示されるか考えてみてください。

<?
	$str = "php";

	if ($str == 0) {
		print "正";
	} else {
		print "誤";
	}
?>

「誤」が表示されると思いますよね。
「正」が表示されると思った人は正解です。既に落とし穴にはまった人ですか? < 実行結果 >

このエラーに遭遇したときは、頭の上は疑問符だらけになるかと思います。
なぜこのような結果になるのでしょうか?

PHPマニュアルの 比較演算子 を見てみると
整数値を文字列と比較する際、文字列が 数値に変換されます。 数値形式の文字列を比較する場合、それは整数として比較されます。

と書かれています。

そして、文字列から数値への変換は次のような定義で行われます。
文字列の数値への変換

数値として文字列が評価された時、結果の値と型は次のように定義されます。

文字列は、'.'、'e'、'E' のどれかが含まれている場合は float、それ以外は整数として評価されます。

文字列の最初の部分により値が決まります。文字列が、 有効な数値データから始まる場合、この値が使用されます。その他の場合、 値は 0 (ゼロ) となります。有効な数値データは符号(オプション)の後に、 1 つ以上の数字 (オプションとして小数点を 1 つ含む)、 オプションとして指数部が続きます。指数部は 'e' または 'E' の後に 1 つ以上の数字が続く形式です。 

条件を踏まえた上で、次のコードを確認しておきましょう。

<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true

switch ("a") {
case 0:
    echo "0";
    break;
case "a": // "a" は 0 にマッチするので、決してここにはたどりつきません
    echo "a";
    break;
}
?>

まぁ「数値と文字列の比較を行う際、文字列は数値に暗黙の型変換が行われる」と覚えてしまえば良いのではないでしょうか。
「PHP プログラミング」に関する「本」の商品を自動的に表示しています。
キーワードに関連していない商品は、Amazonがオススメする商品です。気になる物があればどうぞ。

作成日:2008年07月18日(Fri)

Labs SYSTEM Ver0.93 @ Copyright(c)2007−2025 MOMOYA SYSTEM