基礎知識
PHPを動作させるためには「<?php ?>」のタグで囲む必要がある
終了タグは省略することが可能で、以降にHTMLなどを書かないのであれば省略することが推奨される
PHPで扱うデータには「型」が存在し、以下などの型がある。
文字列型 str
整数型 int
浮動小数点型 float
論理型 bool
配列型 arr
Hello Worldの出力
echo "Hello World";
echo 'Hello World';
print "Hello World";
print 'Hello World';
どちらでも問題ないが、現場や会社によって規定がある可能性があるので必要なら確認をすること。
文字列を囲うのには「シングルクォーテーション」か「ダブルクォーテーション」を使う。
「””」よりも「”」の方が早いが「””」は変数展開ができるという特徴がある。
「echo」はカンマ区切りで複数の文字列を指定できるが、「print」は複数文字列を指定するとエラーになる。
「echo」には返り値がないが、「print」には返り値がある。
・・・基本的に「echo」で問題はないだろう
コメントアウト
// 一列のコメントアウト
# 一列のコメントアウト
/*
複数行のコメントアウト
複数行のコメントアウト
複数行のコメントアウト
*/
ヒアドキュメント
ヒアドキュメントは、<<<開始ID 文字列 終端ID;で使用可能
echo <<<EOD
ヒアドキュメントを使えば、長い文章を簡単に出力することが可能。
連結文字やダブルクオーテーション使わずに済む。
EOD;
「EOM」「EOF」「EOD」がよく使用されるが、「ABC」でも何でも問題はない
→End of Message、End of File、End of Document
改行の方法
echo "<br />"/
echo "\n";
PHP_EOL
「\n」はブラウザに依存するが「PHP_EOL」は、
ブラウザに合わせて改行を行う
エスケープ処理
echo “文字列”; の文字列の中にさらに「””」があればエラーになるため
そういったものは「/」でエスケープする
echo "<a href=\"http://php.net/manual/ja/index.php\">PHPマニュアル</a>";
変数
変数とは数学でいうところの「x」のようなもので、
値を入れて置ける箱という認識でよい
$number = 1;
上記のように記述することで「$number」に「1」という値を保存できる
数字以外にも文字列や真偽値など様々な値を代入できる
上書きも可能である
変数を扱う場合には「参照渡し」という技を使うことができる
数値の代入とは異なり、変数に変数を代入することができる
参照渡しをする場合には「&(アンパサンド)」を使う
・値渡し
$a = 1;
$b = $a;
$a = 2;
echo $b; // 1
・参照渡し
$a = 1;
// $bは$aと同じものとして扱うと宣言
$b = &$a; // アンパサドを使う
$a = 2;
echo $b; // 2
変数には「スコープ」というものが存在する
スコープとは変数の有効範囲と言い換えることができる
基本的に変数は初めて宣言された行から、ファイルの末行までが有効範囲である
宣言よりも前に変数を利用しようとするとエラーとなり、
そのファイル以外でも利用はできない
「$_POST」「$_GET」「$_SESSION」などのスーパーグローバル変数は、
ファイルをまたいで値のやり取りをすることが可能である
関数内で宣言された変数に関しては関数内でしか利用ができないので注意が必要
ただしグローバル宣言を行えば、関数の外でも変数を利用することができる
定数
変数は何度でも上書きできたりするが、
定数は変更してはいけない値を定義するときに用いる
define("PI", 3.14); // 円周率
define("CONSUMPTION_TAX", 0.10); // 消費税
演算子
・算術演算子
$a + $b // 加算
$a - $b // 減算
$a * $b // 乗算
$a / $b // 除算
$a % $b // 剰余
・加算子・減算子(インクリメント・デクリメント)
$a++ // $a の値をひとつ加算する(変数を返し、変数に+1を加える)
$a-- // $a の値をひとつ減算する(変数を返し、変数から-1を引く)
++$a // $a の値をひとつ加算する(変数に+1を加え、変数を返す)
--$a // $a の値をひとつ減算する(変数から-1を引き、変数を返す)
・文字列演算子
$a . $b // 文字列 $a と文字列 $b を連結
・代入演算子
$a = $b // 代入
$a += $b // $a = $a + $b に同じ
$a -= $b // $a = $a - $b に同じ
$a *= $b // $a = $a * $b に同じ
$a /= $b // $a = $a / $b に同じ
$a %= $b // $a = $a % $b に同じ
$a &= $b // $a = $a & $b に同じ
$a |= $b // $a = $a | $b に同じ
$a ^= $b // $a = $a ^ $b に同じ
$a <<= $b // $a = $a << $b に同じ
$a >>= $b // $a = $a >> $b に同じ
$a .= $b // $a = $a . $b に同じ
・比較演算子
$a == $b // $a と $b が等しい
$a === $b // $a と $b が等しい(型を厳密に比較する)
$a != $b // $a と $b が等しくない
$a <> $b // $a と $b が等しくない
$a !== $b // $a と $b が等しくない(型を厳密に比較する)
$a < $b // $a が $b よりも小さい
$a > $b // $a が $b よりも大きい
$a <= $b // $a が $b 以下である
$a >= $b // $a が $b 以上である
・論理演算子
$a and $b // $a かつ $b が TRUE であれば
$a && $b // $a かつ $b が TRUE であれば
$a or $b // $a または $b が TRUE であれば
$a || $b // $a または $b が TRUE であれば
!$a // $a が FALSE であれば
$a xor $b // $a まはた $b どちらか片方のみが TRUE であれば
配列
配列も変数同様に値を代入して保持することができるが、
変数よりも多くの値を保持することができる。
変数とは箱のようなもので、値は1つしか保持できないが、
配列は棚やデスクの引き出しのようなもので値をいくつもしまっておくことができる
配列の棚には鍵があり、指定する鍵によって取り出せる要素が変わる
特にカギを指定しなければ「0」から順番に鍵が振られていく
$fruits = ["Apple", "lemon", "orange", "pineapple"];
echo $fruits[0]; // Apple
echo $fruits[1]; // lemon
echo $fruits[2]; // orange
echo $fruits[3]; // pineapple
配列と連想配列はよく区別されるが、
配列の要素それぞれに鍵を指定したものが連想配列である
よってそこまで明確な違いはない
$rensou_hairetu = [
'key_1' => 'value_1',
'key_2' => 'value_2',
'key_3' => 'value_3',
];
また配列の中に配列を定義することが可能であり、
そのような構造を多次元配列という
条件分岐
if (条件式1) {
// 処理 1
} elseif (条件式2) {
// 処理 2
} else {
// 処理 3
}
「条件式1」が成立していれば「処理1」が実行され、
それ以降の処理はされない。
「elseif」を使って別の条件を設定でき、いくつでも付けることができる
「else」で走る処理は「if」にも「elseif」にも当てはまらないときに実行される
以下に例を示す
$num = 5;
if (num == 5) {
echo "変数numの内容は5です。";
} elseif ($num > 2) {
echo "変数numの内容は2より大きいです。";
} else {
echo "変数numの内容は2より小さいです。";
}
switch分もif文と同じようなことができる
switch文は変数に代入される予定の値と比較し、
その値に応じて処理を分けて実行する時に利用する
switch (変数){
case 値1:
変数の値が値1と等しい時の処理1;
変数の値が値1と等しい時の処理2;
break;
case 値2:
変数の値が値2と等しい時の処理1;
変数の値が値2と等しい時の処理2;
break;
case 値3:
変数の値が値3と等しい時の処理;
break;
default:
変数の値が値1、値2、値3のどれにも等しくない時の処理;
}
switchの直後の()には何かしらの変数を指定し、
その変数の中身と条件を比べてどの処理を実行するかを判断する
case美最後には必ず「break;」を記述する
もし記述がなければ条件が成立したあとのcaseの処理まで実行される
全てのcaseに当てはまらなかった時には「default」の処理が実行される
defaultは必ず記述しなくてはならないわけではない(必要なら記述)
正直ifとswitchの違いなんてあまりないように感じるが使い分けすべきところはあるらしい
・if 文に向いている条件
- 変数の値がある特定の値よりも大きいかったり小さいさかったりなど、条件に幅がある時
- 条件に変数が複数使われている時
- 複数の条件が組み合わされている時
- 分岐する処理が2つしかない時
・switch 文に向いている条件
- 変数がある値になる時に処理を分ける。しかも、その値が3つ以上と多くの種類になっている時
個人的には全部ifでいいと思っている
switchよりもifの方が早いというのも理由のひとつだが、
プログラマ全体として「switch」よりも「if」の方がなじみがあるだろうから、
「if文」を使った方が可読性があがるのではないだろうか
繰り返し文
・while文
while(条件式) {
// 処理
}
while分は条件式が成立し続ける限りループ処理を実行し続ける
処理を終わらせるためには条件式が成立しなくなるか、
「break;」で抜ける必要がある
1回目のループの前から条件が成立していない場合には、
ループ処理は1度も実行されないので、最低でも一回は処理をしたいときには、
「do-while文」を使うのがよい
・do-while文
do{
// 処理
}
while(条件式);
whileの条件式の中に直接「true」を書き込むことはできるが、
無限ループの原因になりかねないので基本的にしない
・for文
for( $i = 1; $i<= 10; $i++ ){
echo $i."<br />\n"; //改行しながら値を表示
}
for文は条件式の値がtrueの間ループ処理を実行し続ける
while文でもfor文でも同じような処理を行うことができるが、
繰り返す回数がわかっている時にはfor文を使い、わからないときにはwhile文を使うのが適切
while文は無限ループに陥りやすいのでどちらかというとfor文の方を個人的には推奨している
・foreach文
foreach($arr as $index => $value) {
// 処理
}
foreach文は配列の要素の数だけループしながら、キーと配列を順番に取り出す
ループ処理ではあるもののforやwhileと異なり目減ループに陥らない点が強みである(ループする回数が決まっているため)
ループ処理を行う上で欠かせないのが、
「break」と「continue」である
breakはループの処理を終了させるという効果を持ち、
continueはループの処理を一回スキップするという効果を持つ。
breakやcontinue以下のループ処理は行われないのが特徴である