基本的な知識を身につける段階では悩むことも少ないですが、自分で考えながらプログラミングするようになると、エラーに悩まされますよね。
些細なミスが原因で発生するエラーから、じっくり考えてもわからない深刻なエラーまで、ずっと付き合うことになります。
今回は、その中でも、よくありがちだと思うエラーをいくつかご紹介するので、後で困らないためにも、頭の片隅に入れてもらえればと思います。
スペルミス
最も単純で、意外と気づけないのがスペルミス。たった一文字間違えただけでも正常に処理してくれません。
関数名などのスペルミスは画面が真っ白になるのでわかりやすいですが、変数名やHTMLコードのスペルミスの場合、そのまま処理が続くことがあるので、ミスに気づくのが遅れることも。。
「なんでこの処理でエラーが発生するんだろう?」と悩んだら、スペルミスを疑いましょう。
セミコロン(;)がない
スペルミスと比べると、そこまで多くないミスですが、変数定義や、echoの後に、セミコロン(;)がないとエラーになります。
<?php echo test() ?>
みたいなミスはよくありがちだと思います。
性質上、セミコロンはあっても困ることが少ないので、慣れないうちは、必要かどうかわからない場面でもセミコロンを使うと安心です。
片方のカッコがない
条件分岐や、配列(array)を組む時にありがちですが、片方のカッコがないことでエラーになることがあります。
例えば、下記のようなコードですね。
<?php if(!empty(test()) echo test(); ?>
コードが複雑になると、片方のカッコ は削除したのに、もう片方のカッコは削除してない…なんてこともあり得ます。
条件分岐が成立していない
「Aなら〇〇、Bなら△△」のような簡単な条件分岐であれば、あまり困ることはありませんが、複雑な条件分岐になると、その条件分岐が成立せずにエラーになることがあります。
if(!empty(text_a())) {
echo text_a();
} elseif(is_text()) {
if(!empty(text_b())) {
echo text_b();
} else {
echo text_c();
}
} elseif(is_text() && !empty(text_d()) ) {
elseif (get_text()) {
echo text_d();
}
} else {
echo text_z();
}
▲このように、if文が入れ子構造になっている時によくエラーが発生するので、条件分岐がちゃんと成立しているかどうか確認しましょう。
変数定義でハイフンを使う
僕もたまにやっちゃうんですが、アンダーラインではなく、下記のようにハイフンを使って変数を定義するとエラーになります。
$baby-metal = "ベビーメタル";
スペルミスの部類に入ると思うんですが、HTMLベースでコードを入力している時などにありがちなので、ご注意ください。
定義されていない関数を使う
何度も使うような長い処理は関数化することも多いですが、気をつけなければいけないのは、関数を定義する前に関数を呼び出したり、関数を定義していないのに呼び出すことです。
特に注意が必要なのが、下記のような条件分岐の中で関数を定義する時。
if (is_apple()) { // 設定がオンの時
function get_apple() {
$apple = null;
if(!empty(textbox_a()))
$apple = "リンゴ";
}
return $apple;
}
これは、is_appleが真の時(設定がオンの時)はエラーが発生しませんが、偽の時(設定がオフの時)はエラーが発生します。
なぜなら、<?php echo get_apple(); ?>
と出力しようと思っても、関数が定義されていないので、出力できないからです。
複雑な処理になってくると、「ある条件の場合だけエラーが発生する」みたいな状況になるので、注意が必要です。
対策
このエラーの対策方法は、関数を呼び出す前に「関数が定義済みか確認する」ことです。
function_existsという関数を使えばそれが可能です。
if (function_exists('get_apple')) echo get_apple();
これで、関数が定義されている時は呼び出して、それ以外はスルーしてくれるのでエラーになりません。
同じ関数名を使う
同じような処理をして、それを関数化する場合、関数名も似てしまうものですが、同じ関数名で定義するとエラーになります。
自分で定義した関数名が同じになってしまうのはもちろんのこと、「使用中のWordPressテーマ・プラグインですでに同じ関数名が使われていた」なんてこともあるので、頭に入れておきたいところです。
対策
先ほどの「関数が定義されているかどうか確認する」対策と同じく、function_existsを使うことで、このエラーを防ぐことができます。
対策方法は簡単で、「カッコ内の名前で関数が定義されていなければ、その名前で関数を定義する」という条件にするだけでOKです。
if (!function_exists('get_apple')) { // get_appleという関数名が定義されていなければ…
function get_apple() {
$apple = null;
if(!empty(textbox_a()))
$apple = "リンゴ";
}
}
まとめ
エラーの原因は他にもまだまだありますが、重要なのは、エラーを発生させないことではなく、エラーの原因に気づくことです。
- 画面が真っ白になる
- 画面に変な文字が表示される
などのエラーは、自然に発生するのではなく、必ずどこかに原因があるからです。
また、その場では気づかなくても、後で「あっ!」と気づくこともあるので、一息つくのも時には効果的ですよ。
以上、ご参考までに!(`・ω・´)ゞ