Home > PHP > 注意が必要なPHPの言語仕様

KENスクールはITエンジニア・Web/DTP・オフィスPCの専門パソコンスクール

注意が必要なPHPの言語仕様

  • Posted by: kenschool
  • 2010年10月23日 18:56
  • PHP

PHPには気を付けなければいけない言語仕様があります。


例えば、ショッピングサイトでカートの中身を表示させる

ページをご覧になったことがある方も多いと思います。

カートの中身

このページには、カートの中身の一覧から

商品の削除ができる機能が付いています。
 

次のコードをご覧ください。

-----------------------------------------------

if(isset($_POST['index'])){

  $index = $_POST['index'];

  array_splice($item, $index, 1);

  $_SESSION['item'] = $item;

}

------------------------------------------------

各削除ボタンには、上から順番に「0」「1」「2」…とhiddenで

パラメータが設定されており(名前が「index」)、

どの商品を削除すれば良いかを識別できるようになっています。
 

上記のコードは、パラメータがあれば取得して、その番号に

該当する商品を、カートから削除しています。


ところが、上記のコードを以下のように書き換えてみると、

一番上の商品だけ削除できないという事態に!!

-------------------------------------------------

$index = $_POST['index'];

if(!$index == ""){

  array_splice($item, $index, 1);

  $_SESSION['item'] = $item;

}

--------------------------------------------------

削除できないということは、

取得した値が「""」と等しいと判定されたからです。
 

一番上に表示されている商品の削除ボタンが押された場合、

「0」がパラメータとして渡されますので、

「0」と「""」を「==」で比較した結果、trueと判定されたことになります。


…うーん。


PHPのマニュアルには、次のように定義されています。

マニュアル

赤く丸で囲んだところをご覧下さい。


「==」による「0」と「""」との比較はtrueになるのです。



ちょっと納得いかない気もしますが、これはPHPの言語仕様として

決められているルールなのです。 


ただ「!=」で「0」と「""」を比較した場合はちゃんとfalseが返ります。
 

先ほどのコードを次のように書き換えると、

一番上の商品も問題なく削除することができます。

-------------------------------------------------

$index = $_POST['index'];

if($index != ""){

  array_splice($item, $index, 1);

  $_SESSION['item'] = $item;

}

--------------------------------------------------

なんだか紛らわしいですね…。


あくまでも「==」による「穏やかな比較」の場合に、このようなことが起こるのです。


ちなみに「厳密な比較」は「===」を使用します。


ご存知の方も多くいらっしゃると思いますが、

よく記述する内容なだけに、ちょっと注意が必要かもしれません。


PHPマニュアル

http://php.net/manual/ja/types.comparisons.php

--------------------------------------------------------------------------------

パソコンスクール KENスクール船橋校 Programインストラクター
http://www.kenschool.jp/school/funabashi/index.html

KENスクールでPHPを学びたい方は、Program講座へ!
http://www.kenschool.jp/Program/index.html
 

トラックバック:0

TrackBack URL for this entry
http://it.kenblog.net/mt-tb.cgi/1044
Listed below are links to weblogs that reference
注意が必要なPHPの言語仕様 from KEN IT BLOG - ITエンジニア/SEを育成するパソコンスクールKENのインストラクターがつづるブログ

Home > PHP > 注意が必要なPHPの言語仕様

Search
Feeds

ページトップへ