PHPは複数の書き方ができる

PHPは、同じことをするのに複数の書き方ができる場面が、 とても多いプログラミング言語だと思います。
「なんで2つあるの?」というもの、多いですね。 ここに全部は書ききれませんし、 新たなバージョンによって改廃が進んでいるところもありますが、 少しだけまとめてみました。


echoとprintの違い

echoは複数の引数をカンマ(,)で区切って渡せますが、printはできません。 またprintは出力する値を戻り値として返しますが、echoは返しません。 そのためごくわずかですが、echoの方が高速と言われています。


require(_once)とinclude(_once)の違い

require(_once)は、インクルードしたスクリプトにエラーがあると、 そこで元のスクリプトの処理も中止してしまいます。
include(_once)は、エラーがあっても警告を表示し、 元のスクリプトの解釈を続行します。


print_rとvar_dumpの違い

デバッグやログのために変数、特に配列の内容を出力するという両関数、 var_dumpの方がデータ型も表示するなど、情報がより詳細です。


elseifとelse ifの違い

波括弧で制御構造のブロックを表現するC言語風で書くなら、 両者は文法上の意味は異なりますが、得られる結果は全く同じです。
しかし、PHPの古くからある別のコロンを使った文法 (if(条件):で始まり、endif;で終わる) の中では、間にスペースを挟まないelseifしか使えません。 コロン風で書くなら、間にスペースを挟むelse ifは使えません。


defineとconstの違い

どちらも記号定数を定義するものです。 「constはクラス定義の中でしか使えない」とよく言われますが、 PHP 5.3以降ではクラス定義の外でも使えるようになりました。 従って現在は、スコープに関してはdefineもconstも全く同じです。
今も残る差異は、defineは初期化時に式で演算ができるのに対して、 constは即値しか駄目で演算できない点があります。 下の例で、defineで256-1(=255)を代入するのはOKですが、 constで1024-1(=1023)を代入するのはエラーになります。

define("MAX_VALUE1", 256 - 1);
//const MAX_VALUE2 = 1024 - 1;
// エラーになる
const MAX_VALUE2 = 1023;

print "MAX1=" . MAX_VALUE1 . "\n";
print "MAX2=" . MAX_VALUE2 . "\n";


array_pushより速い方法がある

配列に1個ずつ値を追加するとき、 array_push関数を覚えてそればっかり使っている人はいませんか。 (鏡を指差す)実はもっと簡単に、配列の添字を省略することで、 末尾に既存の添字+1を発番して要素を追加できます。 以下の2つの配列の内容は全く同じ物です。

$arr1 = array();
array_push($arr1, 23);
array_push($arr1, 34);
array_push($arr1, 45);

$arr2 = array();
$arr2[] = 23;
$arr2[] = 34;
$arr2[] = 45;

Open Source Web Architecture Top

(first uploaded 2011/07/09 last updated 2011/07/09, MISUMI URANO)