PHPの書き方【初心者向け】

筆者はPHP初心者です。なるべく間違いがないよう尽くしましたが、間違っていた場合はご指摘お願います。

#文法
文字列はシングルもしくは、ダブルクォーテーションで囲む※「echo」は文字列を出力するための命令

```example.php
<?php
echo 'こんにちは';　//出力結果：こんにちは
echo "こんばんは";　//出力結果：こんばんは
```

#計算式と数値
数字をクォーテーションで囲むと、文字列として表示される。

```example.php
<?php
echo '5 + 3'; //結果：5 + 3
echo 5 + 3; //結果：8
echo 5 - 3; //結果：2
echo 4 * 2; //結果：8
echo 4 / 2; //結果：2
echo 9 % 2; //結果：1
echo 5 + 3; //結果：8
```

#変数
変数とはプログラミング言語における値を入れておく箱のこと。頭に「\$」をつけることで変数を定義する。「$変数名 = 値;」で様々な値を変数に入れることが出来る。「＝」は右辺を左辺に代入するという意味。

```example.php
<?php
$lenght = 3 * 3;　//「$lenght」=変数名、「3 * 3」=値
echo $lenght; //結果：9
```

```example.php
<?php
$lenght = 3 * 3;
$area = $lenght * $lenght;
echo $area; //結果：81
```
##変数の更新
変数に、その後再び値を代入すると、後で代入した値によって変数の中身が上書きされる。

```example.php
<?php
$num = 3;
$num = 8;
echo $num; //結果：8
```

##変数に数字を足す
変数に数字を足したいときは、変数に数字を足した後、変数に再び代入する。

```example.php
$num = 3;
$num = $num + 10;
echo $num; //結果：13
```
###計算式の省略
計算式は、下記のような省略した書き方もできる。

```example.php
省略前　　　　　       省略後
$x = $x + 2; 　 $x += 2;
$x = $x - 2;  　$x -= 2;
$x = $x * 2; 　 $x *= 2;
$x = $x / 2;  　$x /= 2;
$x = $x % 2; 　 $x %= 2;
```

値が1の時だけ、さらに省略して書ける

```example.php
省略前　　　　　   省略後
$x += 1;　　　　　$x++;
$x -= 1;　　　　　$x--;
```

##文字列の連結(ドット「.」)
ドット「.」記号を用いると文字列を連結することが出来る。何も付けないで実行すると、構文エラーになる。

```example.php
<?php
$name = '田中';
echo $name . 'さん'; //結果:田中さん
```

「.=」を用いると変数と文字列の連結を省略して書くことが出来る。

```example.php
<?php
$name = '田中';
$name .= 'さん';
echo $name; //結果:田中さん
```
##変数展開

ダブルクォーテーションで文字列を囲んだ場合、中の変数を{}で囲むとその部分が変数に入っている値で置き換えられる。

___ダブルクォーテーションで文字列を囲んだ場合___

```example.php
$name = '田中';
echo "おはよう、{$name}さん"; //結果：おはよう、田中さん
```

シングルクォーテーションで文字列を囲んだ場合は変数展開されず、変数が{}で囲まれていてもそのまま文字列としてみなされる。

___シングルクォーテーションで文字列を囲んだ場合___

```example.php
$name = '田中';
echo 'おはよう、{$name}さん'; //結果：おはよう、{$name}さん
```

#if文（条件の分岐）

if文を用いると「もし○○ならば○○を行う」という条件分岐が可能になる。条件が成り立つ場合のみ、｛｝の中の処理が実行される。

以下は「もし、xは5より大きければ処理が実行される」という意味。

```example.php
$x = 10;
if($x > 5){
	echo '$xは5より大きい';
} //結果：$xは5より大きい
```

##真偽値
「true(真)」「false(偽)」2つの値がある

```example.php
a == b //aとbが等しければtrue
a !== b //aとbが等しくなければtrue
a < b   //aの方がbより小さいときtrue
a > b   //aの方がbより大きいときtrue
a <= b  //aの方がbより小さいまたは等しいときtrue
a >= b  //aの方がbより大きいまたは等しいときtrue
```

##else
elseは「もし○○なら○○を行う、そうでなければxxを行う」という処理ができるようになる。elseは日本語で「別の方法で、他に」の意味を持つ。

```example.php
<?php
$x = 2;
if($x > 5){
	echo '$xは5より大きい';
} else {
	echo '$xは5より小さい';
} //結果：$xは5より小さい
```

##elseif
elseifは「もし○○なら○○を行う、そうでなければxxを行う。どちらでもなければ△△を行う」という処理ができるようになる。

```example.php
<?php
$x = 5;
if($x > 5){
	echo '$xは5より大きい';
} elseif ($x < 5) {
	echo '$xは5より小さい';
} else {
	echo '$xは5と等しい';
} //結果:$xは5と等しい
```

#論理演算子「&&」「||」
&&（かつ）は、左右の式がともにtrueの場合に処理が実行される。

```example.php
<?php
$x = 2;
if($x < 5 && $x > 1){
	echo '$xは5より小さい、かつ1より大きい';
} //結果：$xは5より小さい、かつ1より大きい
```
||（または）は左右の式のどちらか、もしくは両方がtrueの場合に処理が実行される。

```example.php
<?php
$x = 2;
if($x > 5 || $x > 1){
	echo '$xは5より大きい、または1より大きい';
} //結果：$xは5より大きい、または1より大きい
```

#switch文（複雑な条件分岐をシンプルに）
if文による分岐が多く複雑な場合に使われる。変数がcaseの値と一致したとき、そのブロックが実行される。caseのどれにも一致しなかった場合は、defaultのブロックが実行される。

```example.php
<?php
$num = 5;
switch ($num) {
	case 8:
		echo "numは8";
		break;
	case 5:
		echo "numは5";
		break;
	case 2:
		echo "numは2";
		break;
	default:
		echo "numは12";
		break;
} //結果：numは5
```

#配列
配列を用いると複数の値をまとめて扱うことができる。書き方は「$配列名[] = 値;」のようにする。また、下記の[0][1][2]はインデックス番号という。インデックス番号は0から始まる。

```example.php
<?php
    $animal = array ('猫', '犬', '猿');
    echo $animal[0]; //猫
    echo $animal[1]; //犬
    echo $animal[2]; //猿
```

___配列を使わない場合はこうなる___

```example.php
<?php
$animal1 = '猫';
$animal2 = '犬';
$animal3 = '猿';

echo $animal1; //猫
echo $animal2; //犬
echo $animal3; //猿
```

#連想配列
連想配列は個々の要素は、インデックス番号ではなく「キー」という文字列などの値を指定することができる。下記の例をみると連想配列はインデックスが数値ではなく、文字列に変わることがわかる。今回の場合、キーは「鈴木」になる。

```example.php
<?php
    $age = array(
        '田中' => 24,
        '鈴木' => 36,
        '山崎' => 29,
    );

    echo $age['鈴木'].'歳'; //結果：36歳
```

___配列の場合はこうなる___

```example.php
<?php
    $age = array (24, 36, 29);
    echo $age[1].'歳'; //結果：36歳
```

#多次元配列
二次元配列以上の配列のこと。

```example.php
<?php
    $profiles = array(
        'tanaka' => array(
            'age' => 28,
            'hometown' => '北海道',
            'sex' => '男性'
        ),
        'suzuki' => array(
            'age' => 33,
            'hometown' => '東京',
            'sex' => '女性'
        )
);

echo '田中さん:'.$profiles['tanaka']['age'].'歳'; //田中さん:28歳
echo '田中さん:'.$profiles['tanaka']['sex']; //田中さん:男性
echo '鈴木さん:'.$profiles['suzuki']['hometown']; //鈴木さん:東京
```

#for文(繰り返し処理)
下記はfor文を用いて、1から10までの数字を繰り返し処理で出力している。echoで1から10まで書くよりも楽に記述することができる。

```example.php
<?php
for ($i = 1; $i <= 10; $i++) { 
	echo $i;
} //結果:12345678910
```
#while文(繰り返し処理)
for文と同様、繰り返し処理の一つ。

```example.php
<?php
$i = 1;
while ($i <= 10) {
	echo $i;
	$i++;
} //結果:12345678910
```
##for文とwhile文の使い分け
繰り返す回数が決まっているときは「for文」、決まっていないときは「while文」を使う。例えば、「○回実行したら終わり」など処理を止めるタイミングが予め決まっている場合は「for文」。何かボタンを押したタイミングなど、「条件ごとに値を処理をしたい」場合は「while文」を使う。※更に詳しい内容は長くなるので割愛

#break文
for文などの繰り返し文の中で、ループを強制的に中断する命令ができる。下記は値が7になった時点で処理が終了になる。

```example.php
<?php
for ($i=1; $i <= 10; $i++) { 
	if ($i > 6) {
		break;
	}
	echo $i;
} //結果:123456
```
___break文がない場合はこうなる___

```example.php
<?php
for ($i = 1; $i <= 10; $i++) { 
    echo $i;
} //結果:12345678910
```

#continue文
continue文は現在の周だけをスキップし、ループそのものは継続して実行する。下記は2の倍数のとき、そのループは終了し、次のループを実行している。

```example.php
<?php
for ($i=1; $i <= 10; $i++) { 
	if ($i % 2 == 0) {
		continue;
	}
	echo $i;
} //結果:13579
```

___continue文がない場合はこうなる___

```example.php
<?php
for ($i = 1; $i <= 10; $i++) { 
    echo $i;
} //結果:12345678910
```

##foreach文
配列や連想配列に対し、先頭から順に繰り返し処理を行う。asの後ろの変数に、ループの度にデータが先頭から順に代入されていく。

___配列___

```example.php
<?php
$animal = array('猫','犬','猿');
foreach ($animal as $value) {
	echo $value;
} //結果：猫犬猿
```

___連想配列___

```example.php
<?php
$animal = array(
	'猫' => 'cat',
	'犬' => 'dog',
	'猿' => 'monkey'
);

foreach ($animal as $japanese => $english) {
	echo $japanese.':'.$english;
} //結果：猫:cat犬:dog猿:monkey
```

#関数
処理をひとまとめに定義して、使い回す際に使う。次の「strlen」と「date」は関数の一部。

##strlen関数(文字列の長さを取得する)
文字列の文字数を返す関数。読み方は、ストラレンと読むらしい。

```example.php
<?php
echo strlen('dog'); //結果：3
```
##date関数(日付と時刻を取得する)
下記は日本の現在の日付を時刻を出力している。「Y」は年。「m」は月。「d」は日。「H」は時。「i」は分を表す。半角や全角によって表示される桁数が違う場合がある。

```example.php
<?php
date_default_timezone_set('Asia/Tokyo');

echo date("Y年m月d日H時i分");//結果(例): 2017年01月01日00時00分
```

##自作関数（ユーザー定義関数）
関数を作るには「function 関数名(){ 処理 }」という書き方をする。 

```example.php
<?php
function animal() {
	echo 'cat';
}
animal(); //結果:cat
```
##引数
関数を呼び出す際、関数に値を渡すと、関数内でその値を利用することができる。この値を引数と言う。

```example.php
<?php
function animal($name) {
	echo 'この動物は' . $name . 'です。';
}
animal('猫'); //結果:この動物は猫です。 
animal('犬'); //結果:この動物は犬です。
animal('猿'); //結果:この動物は猿です。
```
上記の例を具体的にすると・・・関数を呼び出す際、関数(animal)に値(\$name)を渡すと、関数内でその値を利用することができる。この値($name)を引数と言う。

##第一引数,第二引数
下記の例でいくと「\$first_name」が第一引数、「$second_name」が第二引数。

```example.php
<?php
function animal($first_name,$second_name) {
	echo '私が昨日見た動物は' . $first_name . 'と' . $second_name . 'です。';
}
animal('クマ','ワニ'); //結果:私が昨日見た動物はクマとワニです。 
animal('ペンギン','パンダ'); //結果:私が昨日見た動物はペンギンとパンダです。
```

##戻り値
関数から戻ってくる値のこと。関数helloの処理結果をreturnで返している。

```example.php
function hello($name){
  return "こんにちは、${name}さん";
}
echo hello("田中"); //こんにちは、田中さん
```
___return無しの場合はこうなる___

```example.php
function hello($name){
  echo "こんにちは、${name}さん";
}

hello("田中"); //こんにちは、田中さん
```

#オブジェクト指向
オブジェクトは「もの」、指向は「中心に」という意味。つまり、ものを中心にした考え方ということ。 例えば、ショッピングサイトには「商品・ユーザー・購入履歴・カート」など、さまざまな物事が存在する。この物事について各クラスを作る。

▼例えば商品クラスには、商品に必要な性質や処理を持たせる。
・性質「名前」「価格」「品番」など
・処理「商品名を変更する」「値下げを適用する」など

これがものを中心にした考え方の簡単なイメージ。

#用語まとめ
- echo（文字列などを出力するための命令。関数ではない）
- 変数（使い回しができる、データの入れ物。頭に「$」をつける）
- 代入（右辺を左辺に置き換えること。「=」で表す）
- 値（文字や式などが指す数値のこと）
- if文（条件に応じて処理を分岐することができるもの）
- 比較演算子（「<」や「>」のような２つの値を比較する記号のこと）
- 真偽値（比較した結果の値。「true：真」または「false：偽」を返す）
- else（「もし○なら○を行う、そうでなければxを行う」という処理。ifと組み合わせる）
- elseif（「もし○なら○を行う、そうでなければxを行う。どちらでもなければ△を行う」という処理）
- 論理演算子（複数の条件を１つにまとめる時に使う。「&&」と「||」の記号で表す）
- switch文（if文による分岐が多く複雑な場合に使われる）
- 配列（ひとつの箱に複数の値を入れることができるもの）
- array（配列を意味している。PHPでの配列の定義方法で「アレイ」と読む）
- 連想配列（配列と同じような用途で使われる。連想配列はインデックス番号ではなく、「キー」と呼ばれる文字列などの値を指定することが可能）
- 多次元配列（二次元配列以上の配列のこと）
- for文（繰り返しする処理を実行できる。基本、繰り返す回数が決まっているときに使う）
- while文（繰り返しする処理を実行できる。基本、繰り返す回数が決まっていないときに使う）
- break文（for,while,foreachなどのループを強制的に中断する命令）
- continue文（forなどと一緒に使う。現在の周だけをスキップし、ループそのものは継続して実行する）
- foreach文（forなどと一緒に使う。配列や連想配列に対し、先頭から順に繰り返し処理を行う。asの後ろの変数に、ループの度にデータが先頭から順に代入されていく）
- 関数（処理をひとまとめに定義して、使い回す際に使う）
- 自作関数、ユーザー定義関数（自分でつくった関数。関数名を決めることができる）
- 引数（関数に渡す値のこと。関数を呼び出す際、関数に値を渡すと、関数内でその値を利用することができる）
- 戻り値（関数から戻ってくる値のこと）