PHPプログラムを向上させるコツ10個

  • 投稿日:
  • by
  • カテゴリ:  
    • このエントリーをはてなブックマークに追加

しばらくPHPでのコーディングから離れているが、大学からC言語でプログラムを書いているせいかコーディングが好きである
Smashing MagazineにPHPでのプログラムを向上させる10個のコツが書いてあったので、ざっくり要約してみようと思う、これを機会に自分のPHPの知識をちょっとブラシアップできるかな
また、読者の方が参考にしていただけたら嬉しいです


PHPでのプログラムを向上させる10個のコツ

1. SQLインジェクションのチートシートを使う

SQLインジェクションはよろしくないものだ。SQLインジェクションによってハッカーが自分のデータベースに潜り込んでしまうためだ。PHPを使う人の多くはMySQLを使うため、MySQLを使うことを前提にして
よりセキュリティーの高いコードを書くためにチートシートを使って抜け漏れの少ないコードを書くことができるだろう
英語だけど、ここにSQLインジェクション チートシートがありますよ

2. 比較演算子の違いを把握する

comparison.jpg
PHPマニュアルでの比較演算子ページ
比較演算子はPHPでコーディングするに当たっては大きなパートだ、しかしプログラマーで比較演算子に精通していない人たちもいる
I/O readerでの記事ではある比較演算子の違いを理解していない開発者たちがいることを指摘している

例えば、==と===の違いを理解していないなどあるとのことだ
比較演算子を再度PHPマニュアルで再確認するのが良さそうですね


以下のコツ3と4はコードを読みにくくするかもしれないが
この2つのコツはスピードとパフォーマンスに重点を置いたときのコツであり
コードが読みにくくなることを犠牲にしたくない場合は読み飛ばしてください


3. else文はショートカットする

コードを短く、シンプルにできることはよい練習になる
Christian Montoyaさんがここでいい例を紹介しているよ
では、else文を省く例を紹介します

通常はelse文を使って以下のように書く

if( 条件 )
{
$x = 5;
}
else
{
$x = 10;
}

もし、$xがデフォルトの値で10を代入するのなら、最初から10を代入してしまい
以下のようにelse文を省くことができるだろう

$x = 10;
if( 条件 )
{
$x = 5;
}

あまり大きな違いでは無いだろうが、else文をたくさん書いたら
コードの長さの違いは大きくなるのではないだろうか


4. 括弧を省略する

括弧を省略することで自分のコードを短くすることができる
Evolt.orgでは括弧を省略する例が掲載されている


if ($gollum == 'halfling') {
$height --;
}

下の文は上の文と同じ意味である

if ($gollum == 'halfling') $height --;

並べて書くと下のようになりコードを短くできる

if ($gollum == 'halfling') $height --;
else $height ++;

if ($frodo != 'dead')
echo 'Gosh darnit, roll again Sauron';

foreach ($kill as $count)
echo 'Legolas strikes again, that makes' . $count . 'for me!';

5. ereg_replace() 、preg_replace()よりもstr_replace() を使う

文字列を置き換える関数で、効率性を基準として考えた場合
str_replace() が通常の関数よりも効率的である
str_replace() はereg_replace()preg_replace().よりも61%も速いとのことだ


6. 三項演算子を使う

if/elseでコードを書く代わりに三項演算子を使うことでコードが短くなり
より、見やすく整理された状態になる

// 三項演算子の使用例
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// 上記は以下の if/else 式と同じです。
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}


7. Memcached

MemcachedはPHPと使う優れたデータベースキャッシュシステムだ
Memcachedはいつももっとも効率的なデータベースキャッシュシステムとして評価されている
実装するのはすごく簡単というわけではないが、もし、データベースを使うPHPのWebサイトを作る場合Memcachedを使うことでWebが速くなる
MemcachedはPHPによるブログサイトLiveJournalを作るために構築されたんだ

PHP.netにMemcacheのインストールのためのチュートリアルがある


8. フレームワークを使う

全てのプロジェクトでフレームワークを使わないだろうが、CakePHP, Zend Symfony, CodeIgniterのようなフレームワークはWebの開発時間を大幅に短縮できる
フレームワークは通常Webで使う機能をすでに組み込んでいるソフトウエアだ

繰り返し行うタスクを減らすためにフレームワークを使った場合、開発時間を短縮することができる
そして、コードが少ないほどデバッグとテストにかかるタスクも減るということだ


9. エラー制御演算子を正しく使う

PHPでのエラー制御演算子は@だ
関数の前に記述すると、そこからエラーが出たエラーを表示してくれる
この@のエラー制御演算子は、変数がどうなっているのか知らなく、本番のときにエラーを起こしたくないときに使いやすい
しかし、プログラマーでこのエラー制御演算子を正しく使っていないときがある
エラー制御演算子”@”は動作が遅くなるし、パフォーマンス重視でプログラムを書いているときはネックになる

Michel Fortinがエラー制御演算子の@を避けるすばらしい例を書いている
以下に書いてみよう


if (isset($albus)) $albert = $albus;
else $albert = NULL;

上のコードは下のコードと同じ意味である

$albert = @$albus;

上のコードは構文的にはいいが、約2倍動作が遅い
よりよい方法は下のように変数を参照することだ

$albert =& $albus;

これらの変更によって、予期せぬ影響がある場合があるため
パフォーマンスに大きな影響を与えないところで使うことがおすすめみたい


10. strlenの代わりにissetを使う

文字列の長さを得たいのならstrlenの代わりにissetを使いましょう
issetのほうが5倍動作が速いのです
D-Talkで下のサンプルコードと解説が書いてある


$str = 'This is a string';
echo strlen($str);
// 16

$str = 'This is a string';
if (isset($str[9]))
{ echo 'The input is longer or equal then 10 characters.'; }
else
{ echo 'The input is less then 10 characters long.'; }


if (strlen($fubar) >= 10)
{
// Will throw E_NOTICE warning, since $fubar is not set.
echo 'The input is longer or equal then 10 characters.';
}
else
{ echo 'The input is less then 10 characters long.'; }


上の内容は全て小さなチップスだけど
コードの中で繰り返し使うことにより、より早く、短いコードが書くことができるのではないだろうか


しばらくPHPから離れているため僕の知らないことが結構あり勉強になった
もし、1つでもあなたの参考になったら嬉しいね