2017-01-28

PHPを書くときによくある間違いとか(個人差あり)

はじめに

このブログを始めた頃はPHPの勉強を始めたばかりでしたが、最近では仕事でPHP(といっても主にWordPress周りですが)を書くことが多くなってきて、自分の癖とかよくするミスなどが浮き彫りになってきました。最近はPHPの事も書いていなかったので、ちょうど良いのでざっくばらんに書き殴ることにしました。

「<?php」の「php」が抜ける

HTMLの中にPHPを書き込んでいくと、タグを頻繁に閉じたり開いたり?することがあります。熟練者はそうでもないのかもしれませんが。そうして色々書き込んだ後サーバー上ファイルを上書いてページを更新、すると映し出される真っ白な画面。なんでだろうなあと思ってよーくコードを見直すと、開始タグの「php」がない、何てことがたまにあります。個人的には意外と気づかないので、同じミスをする人はそこそこいるんじゃないかって思ってます。

echoでHTMLタグを出してループの開始と終わりが分からなくなる

WordPressの変数から画像URLを取り出してimgタグに突っ込む時など、echoでHTMLタグごと出力するのですが、この方法でdivなどの閉じタグを出力すると、テキストエディタのループやHTMLタグの開始と終了を自動検出する機能ではechoで出力されるHTMLタグまでは見てくれないので、目視でループなどがちゃんと閉じているかどうかを確認しなければいけなくなります。その部分を作成している最中なら問題ないのですが、後から見るときはかなり面倒です。でも、HTMLタグを出力するたびにphpの閉じタグを書くのも美しくないし・・・、というジレンマ。みんなどうしてるんでしょうか。

HTMLとPHPが入り混じったコメントアウトで動かなくなる

HTMLのコメントアウトは<!--HTML-->、PHPのコメントアウトは/*PHP*/です。HTML内にPHPが含まれている部分をコメントアウトする場合、PHPも一緒にグレーアウトするため(Atomの場合、エディタにもよると思います)、一見コメントアウトされているように見えますが、実際のところは動きが抑制されていません。なので、PHPの部分は別でコメントアウトしなければならないのですが、ちゃんとコメントアウトしているつもりが、ウェブページが真っ白になったり、変な文字列が出力されていたり。結局コメントアウト部分をバツっと切り取って別番が来るまで別で保管する、なんてことが多くあります。たかがコメントアウトですが、あなどれません。

===じゃなくて==で判定する

PHPの勉強を始めた当初買った本に、色々な比較演算子が書かれていました。その中でもイマイチピンとこなかったのが==と===の使い分け。===の方が厳密な比較をするというのは分かっているのですが、本を読みながら勉強をしていた頃、==ならとりあえず思った通りに比較してくれるからそれでいいじゃん、と思ったっきりずっと==で比較をしてきました。最近、一つのファイルに多くの判定やループ処理を書くことがあったので、なるべく早い処理方法を選定したいと思い色々調べていたら、どうやら、===の方が早く処理をしてくれるということを知り、そちらを使ってみることにしました。結果的には、思った通りの判定をしてくれたので、迷わずそちらに乗り換えました。面倒臭がらず、何事もちゃんと調べないといけませんね。

ifやwhileのループに「:」を使う

WordPresss関連の調べ物で、ソースをそのままコピーしてきたりすると、ifやwhile等のループ処理の開始が「:」で書かれていることがよくあります。これの場合、ループの終わりには「endif」や「endwhile」と書くことになりますが、これをテキストエディタが認識してくれないので、入れ子にしてループ処理を記述した場合に、一目でどれがどのループの開始と終わりかを判断できません。中カッコなら、カーソルを合わせた際にそれに対応する開始、もしくは終了タグをハイライトしてくれるので問題ないのですが・・・。まあこれも書いてる段階であれば分からなくなるということはそうそうないので大した問題ではないのですが、後々見直すことを考慮すると、コピーしたソースのループの開始を終わりを書き換えるのを面倒くさがらず、分かりやすいように書きなおした方が良いなあと思います。これからはそうします。

さいごに

思いつく範囲で振り返ってみましたが、みなさんはどうでしたでしょうか。同じようなミスや癖がありませんか?

仕事でPHPを書き始めてまだ数ヶ月程度ということもありますが、まだまだ甘々だということを実感します。今後も仕事で触る機会は増えると思うので、より洗礼されたプログラムを書けるようになるためにも、単純な癖などは早めになおしておきたいものです。



コメントする(※は必須項目です)













画像認証