ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

PHPプログラミングについて語るコミュの文字列比較に関して

  • mixiチェック
  • このエントリーをはてなブックマークに追加
PHPSPOTさんの
「PHPで、文字列と数値0の比較は等価になるようです」
http://phpspot.org/blog/archives/2007/12/php0_1.html

EC studioさんの技術ブログの
PHPの文字列比較で気をつけるべきこと - 暗黙の型変換
http://techblog.ecstudio.jp/tech-tips/php-string-compare.html


のように、文字列比較に関することが書かれていました。

数値と文字列を比較すると、文字列が数値としてパキャストされて
予期しない結果が返ってくるなどのことが起こるようなのですが
みなさんは何か対策はしていますか?

ご意見お待ちしています!

コメント(9)

明示的に文字列に変換する為に ."" を付加しています。
関係ないかもですが、

if ($_GET['q'] === '') {

と書いてしまって少しハマりました。
これだと
(1)「qが定義されてるが空」にマッチしますが、
(2)「qが未定義」にはマッチしない
ですね。
普通、未定義ってisset()で見ませんか?
がると申します。
私も以前にこのネタでBlog書かせていただいていたのですが。
http://d.hatena.ne.jp/gallu/20061108/p1
http://d.hatena.ne.jp/gallu/20070516/p1
http://d.hatena.ne.jp/gallu/20071017/p1

「文字の」比較であれば、strcmpが一番よろしいように思われます。
(1)と(2)の両方にマッチさせるのが目的ですから、
if ($_GET['q'] == '') {
if (!isset($_GET['q']) || $_GET['q'] === '') {
のどちらかを書くことになると思いますが、
strcmpの方がよさそうなのでstrcmpを使うように作者に言っておきます。
みなさん返信ありがとうございます^^


> みになっちゃんママンさん
> ryster さん
そうですよね、===にすれば解決なんですよね(^^;


>MADさん
.""を付加すると、==でも大丈夫なんですか??
試してみますわーい(嬉しい顔)


>shirayukiさん
ごめんなさい、ちょっと分からないですあせあせ(飛び散る汗)


>がるさん
おぉー、ブログ読ませていただきす^^
strcmpがいいんですねーわーい(嬉しい顔)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

PHPプログラミングについて語る 更新情報

PHPプログラミングについて語るのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング