unoh.github.com

PHPのちょっとしたコツ

Thu Oct 26 08:07:09 -0700 2006

Keitaです。


個人的には、Pythonの思想を取り入れた JavaScript 1.7 がとても気になっているのですが、それは明日の Keita(個々一番さん)が説明してくれると思うので楽しみに待つことにしましょう☆

ウノウの社員は、スルー力も必要なようです。

さて、そんな世迷言はみなかったことにして、PHPの話題です。
PHPいいよ、PHP素敵だよ。

さて、今回は日ごろ気をつけているPHPのコーディングのコツをTIPS形式で書いていこうと思います。

しかし、はるか過去にいろいろな所で情報収集したので情報の出典を忘れてしまいました。
わかる限りはURLを記載していきますが、記載されてない所があったらすいません&コメントで補足いただけると助かります。

1. array_pushは遅い
いくつかのBlogで語られてることですが、array_pushは、次のような書き方のほうが早いそうです。

	//array_puth($array, 'arraydata');
	$array[] = 'arraydata';


PHPをいじってきた感想でいうと、全体的に組み込み系の関数の類を使うよりは、PHPの構文として定義されているものを利用するほうが早いことが多いです。

2. array_key_existsよりハッシュを使え
array_searchは、毎回全データを検索するので遅いです。
データに配列の順序が関係ないなら、連想配列 + issetを使うほうが高速です。
連想配列の場合ハッシュの仕組みが使われるのでその分高速です。
同様に、array_key_existsよりissetのほうがはるかに高速です。
    //$array[] = 'arraydata';
    //if (array_search('arraydata', $array)) {
    //    echo 'あるよ。';
    //}

    $array['arraydata'] = 'arraydata';
    if (isset($array['arraydata'])}
        echo 'あるよ。';
    }



上の2つの、array関係は、多数の値がある場合に結構変わってきます。

※情報が不正確でしたこちらの記事を参照ください


3. $_ほげほげは直接使わない
これは心得の問題です。
$_GETや、$_POSTなどの値は直接使わないようにしましょう。
特に$_SERVERには、外部から送られてくる値を直接格納している場合がありますのでこれを直接使うとひどい目にあいます。
一般的なフレームワークなら、これらをラッピングする関数などが準備されているハズですのでこれを使いましょう。

4. if文は「===」を使う
PHP勉強会で、Dinoのhnwさんに教わったことですが、'0.00' == '0'は真です。
もし、仮に、パスワード処理でデータ側でMD5などのハッシュ化してない場合に、上記が真になっては非常にまずいのではないでしょうか。
さらにいえば、もっといろいろな形で、真となる場合があるので「==」は使わず、「===」を使いましょう。

    if ($str === 'hoge') {
    if (! ($str === 'hoge')) {
    if (is_null($null) === false) {


5. countは配列数を毎回数えてる
これを知ったのは、Pukiwkiのクリーンアップの記事を見たときなのですが。
countは配列の件数を数えるらしいので次のような書き方に直したほうが無難です。

    // if(count($array))
   if(! empty($array))
   // for($i = 0; $i < count($array); $i++)
   $count = count($array);
   for($i = 0; $i  < $count; $i++)


※毎回数えてるわけではないらしい。
お詫びして訂正します。

まぁ、基本的に、ZendFrameworkや、Pearのコーディング規約でことたりるような気もします。