• ベストアンサー

IF文の引数をクォーテーションで囲む/囲まない場合の違い

後学のために知っておきたいのですがPHP4のIF構文で、 if($a >= '0'){ $b = $a +1;} と if($a >= 0){ $b = $a +1;} のように、シングルクォーテーション(')で くくったときとくくらないときで 解釈が変わることがあるのですが (ゼロ以上とみなしてくれるときと、そうでないときがある) これらに明確な違いはあるでしょうか? ついてに、以下のようにダブルクォーテーション(")の場合にも 何か留意すべき点があればご教示いただけますと幸いです。 if($a >= "0"){ $b = $a +1;}

  • PHP
  • 回答数3
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • satoh
  • ベストアンサー率77% (17/22)
回答No.3

PHPの場合、''や""で囲った場合は文字列として比較されます。(C, C++, Javaなどと違って''で囲った場合でも""で囲った場合でも、どちらも同様に文字列として扱われます。) 文字列としての比較と数値としての比較の場合、前者はそれぞれの文字の文字コードで大小を比較されます。数値の場合は、数値としての大小で判定されます。 ここで注意が必要なのですが、比較する一方が数値の場合、他方も数値に変換されてから比較されます。両方とも文字列なら文字列として比較されます。 ご質問の件ですが、$aが数値変数であった場合(is_float()かis_int()が真になる場合)、ifでの比較において、'0'と比較しても、$aも一旦数値に変換されてから比較されるので、'0'と書いても0と書いても、同じ結果になります。 一方、$aが文字列だった場合(is_string()が真の場合)、文字列同士の比較となります。つまり、"0"の文字コードである48より小さい文字コードを持つ文字(!"#$%&+-*/など)で始まる文字列なら"0"より小さいと判定され、48より大きい文字コードを持つ文字で始まる文字列なら"0"より大きいと判定されます。 ちなみに4.4.1で試したところ、is_numeric()が真になるような値の場合、比較する両方が文字列だとしても、数値に変換して比較するようです。 例えば今回の質問の場合、$aが数値的なら特に問題なく動作しますが、$aが"a"なら"0"よりは大きいですが、0とは等しくなります。このあたりが気をつける点でしょうか。 特に、PHPではフォームから入ってくるものは全て文字列として扱われるので、数値しか入ってこないつもりで考えていると、数値以外の値が送られてきた場合、想定外の動作をするかもしれません。 ま、本来は、ユーザからの入力は基本的に信頼せず、必ず入力値をチェックするべきものですけどね。 ''で囲った場合と""で囲った場合の違いは、文字列中での$での変数展開や\で始まるエスケープ文字が使えるかどうかの違いで、単純な文字列として考えると、全く同じものです。

litton101
質問者

お礼

satohさん、詳細な解説ありがとうございました。 本当に勉強になりました。 プログラミング初心者で、このあたりがあいまい なため思うような動作にならないと 'をはずしてみたりと非効率なことをしていたの ですが、振り返ってみてなるほど、全ての挙動が ご教示の内容と一致していたように思います。 ログを保存させていただき、今後のPHP学習の参考に させていただきます。 心より御礼申し上げます。

その他の回答 (2)

回答No.2

PHPはよく知らないのですが、 0 ←数字 '0' ←文字(ただし1文字) "0" ←文字(2文字以上) と使い方が分かれている気がします。 なので3番目の""は間違いだと思います。 '0'とやった場合、文字として扱われておかしくなるのかな~と思いました。

litton101
質問者

お礼

なるほど、そういう解釈でしたか。 参考になりました。ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

数値としての比較の場合、0 にすべきかと思います

litton101
質問者

お礼

ご教示ありがとうございます。 以後、留意してみます。

関連するQ&A

  • シングルクォーテーションとダブルクォーテーション

    いつも楽しく拝見させて頂いています。 初心者ですが宜しくお願いします。 シングルクォーテーションとダブルクォーテーションの使用方法について質問させて頂きます。 select文でテーブル名を指定するときはそのまま(たとえば'名前'じゃなく名前)しないとエラーになります。そういう風なシングルクォーテーション(又はダブルクォーテーション)を使ってはいけないところ、またシングルクォーテーションにしないといけないところ、ダブルクォーテーションにしないといけないところを教えて頂けますでしょうか?もし両方OKならその違い等も教えていただけるとうれしいです。 以上宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ダブルクォーテーションが置換できません

    いつもお世話になっております。 PHP初心者です。 シングルクォーテーションとダブルクォーテーションを文字列として入力したいと思い、以下のように記述しました。 -------------------------------------------------- $naiyo = $_POST['naiyo']; $search = array('\'','"'); $replace = array('\'\'','\"'); $naiyo2 = str_replace($search,$replace,$naiyo); -------------------------------------------------- シングルクォーテーションは置換された(文字列として表示された)のですが、ダブルクォーテーションは表示されず、ダブルクォーテーション以下の文字列が消えてしまいます。 置換ができていないというよりも、そもそもダブルクォーテーションが検索に引っかかってもいないようです。 どのようにすればダブルクォーテーションも置換できるか、お分かりの方がいらっしゃいましたらご教示ください。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • IF関数でのダブルクォーテーションマーク表示について

    ExcelでIF関数の式を使用している場合に、"のダブルクォーテーションマークを表示したいんです。 例えば、A1のセルが100以上の場合を "A" 100以下は "B" と表示する場合の式は =IF(A1>=100,""A"",""B"") に普通なると思います。 しかし、この場合、ダブルクォーテーションマークを2つつけることになり式にならず認識されません。 この表示は出来ないんでしょうか。 ほかのセル、例えばB1に、"A" B2に"B"を書き入れ、それを参照させて、=IF(A1>=100,"B1","B2")という風にしたんですが、それ以外で参照せずに作業できる仕方はありませんか? よろしくお願いします。

  • ダブルクォーテーションとシングルクォーテーションの使い道

    文字を表示させる際、その文字をダブルクォーテーションで囲みますよね。 では、シングルクォーテーションはどういうときに使うんでしょうか。 この使い方の違いについて分かる方がいましたら、教えてもらえると大変有り難いのですが。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • シングルクォーテーションから後が消える!!

    PHP初心者です。 [php2.php]から[php1.php]のフォームの内容を読み取るとき、そのフォームのテキスト文字列の中にシングルクォーテーションが入っているとその後から文字が消えてしまいます。 ダブルコーテーションではうまくいくのですが。 解決方法をぜひご伝授ください。

    • ベストアンサー
    • PHP
  • php初心者です。シングルとダブルのクオーテーションが混在する下記のよ

    php初心者です。シングルとダブルのクオーテーションが混在する下記のようなスクリプトを、print関数でどのように書けば良いのでしょうか。ご教示下さい。 <a href="JavaScript:void(0)" onClick="imgwin('glass.jpg',240,180)">aaa</a>

    • 締切済み
    • PHP
  • PHPでjavascriptを書き出すときのクォーテーションの使い方

    PHPで書き出したSQL文をjavascriptの関数に渡すなどしていて、 ダブルクォーテーションやシングルクォーテーションが4つ以上の入れ子になったときどのように表現すればよいのでしょうか? 例 $a = "<a onClick=\"test('SELECT * FROM table WHERE field = 'field'')\">text</a>"; *test()はjavascriptの関数とします。 このように入れ子が深くなっていったときの回避の方法やクォーテーションの使い方の規則などあれば教えてください。

    • ベストアンサー
    • PHP
  • ファイルにコーテーション類を書き込む方法

    HTMLのフォーム(Textarea)で入力したテキストを そのまま、ファイルに書き込みたいです。 (正式にはHTMLエディタのようにしたいです) 以下のソースのように作成しましたが、 シングルコーテーションやダブルコーテーションが ファイルに書き込まれる時に¥がついてしまいます。 ================== 入力フォーム =================== <html> <body> <form name='fm' action='fsave.php' method='post'> <textarea name='txt' rows='20' cols='40'> </textarea> <input type='submit' value='ファイル保存'> </body> </html> ================== fsave.php =================== <?php $txt = $_REQUEST["txt"]; $fp = fopen("sample.html","w"); fwrite($fp,$txt); echo "ファイル書き込み完了"; ?> =============== TEXTAREAへの入力値 =================== <a href='aaa.html'>LINK </a> =============== sample.htmlの中身 =================== <a href=\'aaa.html\'>LINK </a> シングルコーテーションやダブルコーテーションを フォームからPHPに渡して、ファイルに書き込むには どうすればよろしのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • ダブルクオーテーション、シングルクオーテーション

    プログラミング 「"」  と 「'」 の違いについて プログラミングにおいてダブルクオーテーションとシングルクオーテーションは双方、「コンピュータに文字列と認識させる」記号だと思うのですが、プログラミング言語問わず " と ' に文字列を表す以外の特別な意味を持つケースは何かありますか? (文字列を表す以外の意味はありますか?)

    • ベストアンサー
    • Java
  • "と'の違いについて。

    タイトルのままなのですが、SQLPlusでのシングルクォーテーションとダブルクォーテーションの使用上の違いは何でしょう?

専門家に質問してみよう