PHP の empty() の動作について
空=エンプティ の考え方を間違っていたために、はまりました。
マニュアルには、変数の値が次の場合空であると、書かれています。
- “” (空文字列)
- 0 (0 は整数)
- “0” (0は文字列)
- NULL
- FALSE
- array() (空の配列)
- var $var;(変数が宣言されているが、クラスの中で値が設定されていない)
私がはまったのは、0 も空と評価されることを考慮していなかった点です。
以下、私のはまった例です。
HTML の form から受け取った値を、次のコードで評価しました。
[code lang=’php’] if (!empty($_POST[‘XXX’])) {$params[‘XXX’] = $_POST[‘XXX’];
}
[/code]
このとき、POST されるべき情報が SELECT タグだったとしましょう。
本来は $params[’XXX’] には 0が入って欲しいのですが、if() の条件式は偽となるため(empty(0) は True)、$params[’XXX’] は空になってしまいます。
となると、その後 $params[’XXX’] を利用する処理が、変数の中身を数値前提で書いてしまうと、おかしな事になるのです。
*
私がはまったのは、この $params を利用するクラスライブラリ側で、入力値のチェック+無かった場合のデフォルト値設定をしていたために、エラーが起きなかったのが原因です。
せっかく error_reporting() を E_ALL にしているのに、ロジックで論理エラーを起こしてしまったと言う失敗です。
プログラムって、難しいですね。
10年集客し続けられるサイトを、ワードプレスで自作する9つのポイント プレゼント
【最後まで読んでくれたあなたに】
あなたは、24時間365日、自分の代わりに集客し続けてくれるWebサイトを作りたい!と思ったことはありませんか?
私はこれまで500以上のWebサイトの構築と運営のご相談に乗ってきましたが、Webサイトを作ってもうまく集客できない人には、ある一つの特徴があります。
それは、「先を見越してサイトを構築していないこと」です。
Webサイトで集客するためには、構築ではなく「どう運用するか」が重要です。
しかし、重要なポイントを知らずにサイトを自分で構築したり、業者に頼んで作ってもらってしまうと、あとから全く集客に向いていないサイトになっていたということがよく起こります。
そこで今回、期間限定で
『10年集客し続けられるサイトをワードプレスで自作する9つのポイント』
について、過去に相談に乗ってきた具体的な失敗事例と成功事例を元にしてお伝えします。
・ワードプレスを使いこなせるコツを知りたい!
・自分にピッタリのサーバーを撰びたい!
・無料ブログとの違いを知りたい!
・あとで悔しくならない初期設定をしておきたい!
・プラグイン選びの方法を知っておきたい!
・SEO対策をワードプレスで行うポイントを知りたい!
・自分でデザインできる方法を知りたい!
という方は今すぐ無料でダウンロードしてください。
期間限定で、無料公開しています。
※登録後に表示される利用条件に沿ってご利用ください
あなたは、24時間365日、自分の代わりに集客し続けてくれるWebサイトを作りたい!と思ったことはありませんか?
私はこれまで500以上のWebサイトの構築と運営のご相談に乗ってきましたが、Webサイトを作ってもうまく集客できない人には、ある一つの特徴があります。
それは、「先を見越してサイトを構築していないこと」です。
Webサイトで集客するためには、構築ではなく「どう運用するか」が重要です。
しかし、重要なポイントを知らずにサイトを自分で構築したり、業者に頼んで作ってもらってしまうと、あとから全く集客に向いていないサイトになっていたということがよく起こります。
そこで今回、期間限定で
『10年集客し続けられるサイトをワードプレスで自作する9つのポイント』
について、過去に相談に乗ってきた具体的な失敗事例と成功事例を元にしてお伝えします。
・ワードプレスを使いこなせるコツを知りたい!
・自分にピッタリのサーバーを撰びたい!
・無料ブログとの違いを知りたい!
・あとで悔しくならない初期設定をしておきたい!
・プラグイン選びの方法を知っておきたい!
・SEO対策をワードプレスで行うポイントを知りたい!
・自分でデザインできる方法を知りたい!
という方は今すぐ無料でダウンロードしてください。
期間限定で、無料公開しています。
※登録後に表示される利用条件に沿ってご利用ください
issetを使われたのでしょうか?
>Tomohiro Takahashi さん
コメントありがとうございます。
仰るとおり、最終的には isset() を変数のチェック前に挟み、存在チェックすることで回避しました。
最近フレームワークでしか作っていなかったので、けっこう初歩的なところではまった感じです^^;