PHP 高速化: あいまいな判定の回避 | PHP | みどりのウェブ開発日記

PHP 高速化: あいまいな判定の回避

カテゴリ: PHP

記事投稿日: 2017年6月2日



あいまいな書き方とは

PHP を早く書くための基本として、型を明示的にすること、あいまいな判定はしないこと、があげられると思います。

あいまいな判定でいうと、
=== ではなく、== と書く。
または、 !== ではなく、 != と書く。

あいまいな書き方は、「型変換」を自動で行ってくれるという、一見、メリットがあるように見えるのですが、これは NG です。
型変換という処理が入るだけ、パフォーマンスは悪くなります。

サイトの規模が大きくなるほど目に見えてくる

先日耳にしたのですが、日本最大規模の、ある予約サイトでのこと。

ある処理であいまいな書き方をやめたら、それだけでパフォーマンスが倍近く改善された、とのこと…。

大規模な開発になるほど、こうした小さな配慮が顕著に出てくるので、驚き、また認識が浅かった点、大いに反省しました。

元々、あいまいな書き方は嫌いなので、自分のコードはしっかり型を意識していましたが、チーム内のメンバーがあいまいな書き方をしている場合、どうしてそれが悪いのか、自信をもっては言えなかったのです。

これからは、パフォーマンスが悪くなるということで、自信をもって説得できます。

データベースからの Null や空文字の判定でベストは empty かも

データベースのカラムの初期値として、Null や空文字を指定されていることは多いと思います。
その場合、市販の初心者向けの教科書などでは、 !$hoge[‘name’] みたいに判定しているのをよく見かけます。

型を気にすると、この ! もあいまいな判定なので、結構気持ち悪くなってきます…。

また、データベースで何か不具合が起こった場合、通常は例外処理で対応できますが、そうでない場合、上記の例でいうと、!$hoge[‘name’] は Undefined index となり、未定義エラーが出てしまいます。

! チェックは、あいまいな判定の処理のひとつで、パフォーマンスも悪いですし、何かの時の未定義エラーに対応できません。

empty なら、NULL, 空文字, 未定義 に対応できるので一番安全です。

ちなみに、empty は関数のオーバーヘッドがあるため、明示的に空文字を比較すると分かっているなら、 === を使った方が早いですので、どこに何を使うのかがベストなのかは、用途によって変わってきます。

結論

あいまいな判定や、型変換について知識が深まると、何より他人に自信をもってコードの説明ができます。

こういったことは、忙しい日々の作業からはなかなかつかめないので、時間のある時に自分でテキストを見たり、検証することはやっぱり大切だと思います。








コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA




トップに戻る