PHPまとめ - 演算子/制御構造

HOME | TOP

「演算子」と「制御構造」のページを統合しているのは、どのプログラミング言語でもそれほど違いはないので適度に読み飛ばす為。ド忘れしたら確認する程度ということで


■ 条件分岐

▼ if文

if文に限らず「{ 〜 }」の範囲は、ブロックやブロック構造などと言われる部分です。

ブロック内が単文だとブロックの記述は省略できます。

条件分岐が複数あれば、elseifやelseを使うことができます。

「elseif」は「else if」と書くこともできるので、どちらかに決めて統一した書き方をするようにします。




▼ switch文

if文に似ていて、条件分岐が多くなる場合に使うと見やすくなる。

$iの持つ値と一致するcase内が実行されて、breakでswitchブロック外へ出ます。
最後のdefaultは、どのcaseにも一致しなかった場合に実行される部分です。

各所にbreakがあるが、書かないと直下も実行していき、breakが書かれた部分までが実行され続ける。

最後のdefault内のbreakは意味的に不要だけど書くクセを付けておいた方がよい(他言語で省略できないものがある)

ちなみにif文ではbreak文が使えない。break文が使えるのはswitch文と、ループを抜けるときだけ(switch内・ループ内に書いたif文ならばもちろん使えます)

switch (カッコ内)に書いた値とcaseの値が一致すればそこが処理されるので、以下のようなトリッキーな書き方もある。

「===」という演算子は、「==」演算子と同様等しいかどうかをチェックする比較演算子ですが、「===」の方は単にデータ型込みで完全一致かどうかをチェックするだけなので処理が速いです。(数値3と文字列"3"が等しいかどうかチェックするには型を同一にしたときの比較まで行うので当然遅くなる)


■ ループ

▼ for文

処理内容が単文なら、例によってブロック省略ができます。

始めからループ継続条件を満たしていなければ、一度も処理内容は実行されません。

100回ループ処理する例は以下のとおり

$iを使って、0〜99までの100回をカウントしてループ終了

よく議論されるforループの使い方

forとwhileのループ継続条件は、ループの度に解釈されるため、ループの度に関数がコールされてしまい、その分だけ負荷がかかってしまうということがある。

解決法は以下のとおり

但し、ループ回数が少なければループ条件部に関数を書いてもそんなに気にするほどのことではないです。




▼ foreach文

forにちょい似ですが、配列を処理するのがこのforeachループです。

以上が基本的なforeachループを使った配列処理です。
foreachでは必ず「as」を使って配列のキーや値を参照します。asはforeach以外では使うことはありません。(多分)

配列のキーだけを参照したい。値は特に参照する必要がない場合には前述の上の方を使って$valueを無視するか、以下のように関数を使ってキーを取り出す方法があります。

array_keys()関数を使うことで配列のキーを値とする配列を新たに作って、元はキーだったその値を順にセットしている。

ちなみにforeachカッコ内では、ループの度に解釈されてるわけではなくて、最初に1度だけ解釈して処理している。したがってカッコ内に関数を書いても気にするほどの負荷にはならない。

その他、さまざまな関数を使った処理例

その他、負荷を軽くするポイントとしてPHP5以降において値代入の代わりにリファレンスを使うことができる。
一般に配列の値がある程度の長さの文字列だったりすると、いちいち代入するよりも実体を参照した方が速いし軽い。

リファレンスを使うので、実体のある配列じゃないと使えない。




▼ while文

whileはループ系の中では最速のものです。とは言ってもかなりのループ回数じゃない限り体感できるほど差はないので気にする必要はありません。

最初からループ処理条件を満たしてないと、一度もブロック内は処理されない。

最初に必ず1度ブロック内を処理してからループ継続条件を確認する用に、以下のものが用意されている。


■ ジャンプ

▼ continueとbreak

各種ループおよびswitch文の内側でしか使うことができない。(if文では使えない)

一気にブロック外へ抜けることができる。

ブロックが多重になっていれば抜ける(または戻る)ブロックの階層数を指定できる。




▼ goto

PHP5.3以降で使える。使わない人が圧倒的に多いので使わないようにしたほうがよい





■ 演算子

▼ 比較演算子「==」と「===」


▼ 算術演算子

説明
-$x-1 * $xと同じ
$x + $y加算
$x - $y減算
$x * $y乗算
$x / $b除算
$x % $b剰余

/(除算)の返す値は割り切れれば整数、割り切れなければ浮動小数点数になる。

つまり、「元の数 = intval(元の数 / 割る数) * 元の数 + (元の数 % 割る数)」の関係になる。



・浮動小数点数の値同士で割ったときの余り(剰余 モジュロ)


▼ 文字列演算子

"."(ドット)を使うと文字列同士を連結することができる。




▼ 論理演算子

&&とand、||とor優先順位の違い


2010(C)Mingw