【PHP】PHP 基礎

## 概要
PHPの基本文法についてまとめました！
ご指摘等あればぜひお願いいたします。

## はじめに
```index.php
<?php
//ここに入力していく
?>
```
<php ?>というようにすることでphpとして出力する事ができます。

## echo
phpの中でもかなり重要な`echo`について解説します。
```index.php
<?php
  echo 'Hello world'; 
?>
```
上記のように`echo`の後に半角スペース区切りで値を指定すると、値が出力されます。phpでの出力というのはHTMLへ書き込むということです。

そして、phpは文の終わりに必ず`;`セミコロンをつけてください。
phpでは、シングルクォーテーション`''`やダブルクォーテーション`""`で囲まれた値は、`文字列`というデータとして扱われます。ちなみに文字列というデータは、`string型`と呼ばれます。

プログラミングにおいて`型`という概念は非常に大切なので後に解説します。

## 変数
変数というのは、データを一時的に保存できる箱というイメージです。
```index.php
<?php
  $fruit = 'りんご';  ⇦$fruitという変数の中にりんごという値が入っている
?>
```
phpでは、頭に`$`をつける必要があります。そして`=`を用いて変数の中に値を代入します。
`=`は等しいという意味ではなく右辺を左辺に代入するという意味を持ちます。

では、先ほど作った変数を出力させてみます。
```index.php
<?php
  $fruit = 'りんご';
  echo $fruit;
?>
```
これを実行させるとこうなります。
```
1.りんご
```
作成した`変数`の中身が展開されて出力されています。

下記のように変数の中に数値`int型`を入れた場合はそのまま計算することもできます。
```index.php
<?php
 $test1 = 2;
 $test2 = 3;

 echo $test1+$test2;
?>
```
これを実行すると5が出力されます。
ちなみに変数を`'`や`"`で囲ってしまってはダメです。そうしてしまうと変数ではなく文字列として扱われてしまい、中身が出力されません。

## 型の概念
上記で出てきた`string型`や`int型`のように型というものが存在します。
```index.php
<?php
  echo 10+2*2;
?>
```
これを実行すると14という値が出力されます。整数型intは四則演算をすることができます。
しかし、`'`や`”`で囲ってしまうと文字列型stringになってしまい計算はしてくれず文字列として出力されてしまいます。

phpの型の種類は主に8種類あります。
### スカラー型
スカラー型は主に4種類
|型　日本語|型　英語|説明|
|---|---|---|
文字列型| string　|'Hello'や'こんにちわ'などの文字列|
|整数型| integer |1、2、3などの整数|
|浮動小数点型|float|1.4や3.4などの小数|
|論理型|boolean|TrueかFalse|

### 複合型
複合型は主に２種類
|型　日本語|型　英語|説明|
|---|---|---|
オブジェクト型| object　|オブジェクト|
|配列型|array |配列|

### 特別型
特別型は主に２種類
|型　日本語|型　英語|説明|
|---|---|---|
真偽型| null　|null|
|リソース型| resource |ファイルやデータベースの接続など|

## if文
条件が満たされるとき、条件が満たされないときなど条件分岐を行いたい時に用いるのが`if`です。
```index.php
<?php
  if (bool型の値) {
      命令
　}
?>
```
if文は（）内の値がTrueの時に命令が実行されます。では簡単なif文を書いてみます。
```index.php
<?php
  if (TRUE) {
     echo 'if文';
　}
?>
```
上記のように実行すると（）内がtrueなので`if文`というのが出力されます。
```index.php
<?php
  if (TRUE) {
     $x = 1+2;
     echo $x;
  }
?>
```
このようにif文の{}の中には変数を入力することもできます。ちなみに（）内の値がFalseならこの命令は無視されます。
```index.php
<?php
  $a = TRUE;
  if ($a) {
     echo 'りんご'；
?>
```

()内にも変数を入力することもできます。
そして、if文の（）内には、1<2などのようにint型2つを用いて1つのbool型を作ることもできます。これを`二項演算`といいます。
```index.php
<?php
$a = 2;
$b = 1;  
if ($a>$b) {
    echo '$aは$bより大きい’;
?>
```
`<>=%+-`などの記号は`比較演算子`と呼ばれています。
例えば、1==2は等しくないのでFalseになるんですが、ここで両辺を見るとint型です。しかしphpでは、1=='1'というint型とstring型の演算もできてしまいます。
これを`var_dump`という関数を使ってどのような型になるのかみてみましょう。
```
bool(true)
```
このように1=='1'はtrueになっています。基本的には、数値と文字列の比較などのように型を合わせないで比較するのはあまり望ましくありません。
これは`暗黙の型変換`というものが行われているということです。
1===1などのように＝を3つ用いた厳密な比較というものが存在します。
===は暗黙の型変換を行わず、両辺の型が同じじゃないといけないので＝＝よりも＝＝＝を使うことをお勧めします。

```index.php
<?php
  $x = 4;
  if($x >= 0) {
     echo 'プラス';
  } else {
     echo 'マイナス';
  }
?>
```
これを実行するとプラスが出力されます。ここで`else`というものが出てきましたが`else`はif文の（）内がFalseの場合`else`の中が実行されます。
上記の場合ifの最初の条件がtrueなので`else`は出力されませんでした。
次に条件が3つの場合をみてみましょう。
```index.php
<?php
  $x = 4;
  if($x > 0) {
     echo 'プラス';
  } elseif($x < 0) {
     echo 'マイナス';
　} else {
     echo 'ゼロ';
　}
?>
```
上記のように`elseif`を使うことでいくらでも条件を分岐させる事ができます。
まず、ifの中がtrueの時にプラスが出力され、もしfalseならelseifのマイナスが出力されます。さらに、elseifがfalseだった場合に、else内のゼロが出力されるようになっています。
このように上記の例のように条件がいくつあっても、`必ずtrueになるのは1つだけでそれが実行`されます。

少し複雑ですが、`if`文は二重に書くこともできます。
```index.php
<?php
 $x = 1;
 if ($x > 0) {
    if ($x % 2 === 0) {
       echo '正の偶数';
　　} else {
       echo '正の奇数';
　　}
 } elseif ($x < 0) {
    if ($x % 2 === 0) {
       echo '負の偶数';
　　} else {
       echo '負の奇数';
　　}
 } else {
       echo 'ゼロ';
 }
?>
```
上記を実行すると`正の奇数`が出力されます。
## 連想配列
連想配列というのは、ある値に別の値を対応させて保持するデータ型になります。キーバリュー型とも呼ばれています。
一方の値を`key`,もう一方の値を`value`と言います。
そしてこのkeyを使ってvalueを取り出す事ができます。
```index.php
<?php
 　$fruit = array (
      'apple' => 'りんご',
　　　 'orange' => 'オレンジ'
　　);
   echo $fruit ['apple'];
?>
```
上記の例では、appleが`key`でりんごが`value`になります。そして、keyであるappleを指定することでechoではりんごが出力されます。
連想配列に値を追加することもできます。
```index.php
<?php
  $fruit = array (
      'apple' => 'りんご',
　　　 'orange' => 'オレンジ';
　　);
　$fruit ['greap'] = 'ぶどう';
?>
```
このようにすることで$fruitという連想配列の中にgreapというkeyとぶどうというvalueが追加されました。
基本的にkeyに指定するのは整数か文字列が望ましいです。もしそれ以外の型の場合、暗黙の型変換が行われるか、エラーが出てしまいます。
　
連想配列はkeyと=>を省略して書くこともできます。
```index.php
<?php
  $fruit = array ('miura','kudou','simizu','okada');      
?>
```
上記のように書くと、左から順に0から始まる連番が当てられこれがkeyになります。この形は`配列`というのですが正確には`連想配列`です。
この配列を`var_dump`で見てみましょう。
```
array(4) {[0]=>string(5)miura [1]=>string(5)kudou [2]=>string(6)simizu [3]=>string(5)okada}
```
miuraから順に0から始まる連番になっているのがわかります。

ちなみに配列や連想配列は、arrayを用いて記述していますが、arrayを使わず`[]`で値を囲む短縮構文も用意されています。
## for文
for文は、繰り返し処理を行いたい時に使用します。文字だとわかりづらいので実際に書いてみます。
```index.php
<?php
  for ($i = 0; $i < 10; $i++) {
      echo 'こんにちは';
  }
?>
```
これを実行すると、こんにちはが10回出力されます。このように同じ処理を何回も行わせたい時に使うのがfor文です。
次にfor文の構造について説明します。
```index.php
<?php
  for (初期化処理; 継続条件; 更新処理) {
　　　　// 処理
?>
```
繰り返し処理が行われる一番最初に一回だけ呼ばれるのが`初期化処理`です。これは変数です。
そして`継続条件`にはbool型が入ります。継続条件がtrueの間、繰り返し処理を行なってくれます。継続条件の値がfalseになった時にこの繰り返し処理は止まるようになっています。
for文の繰り返し処理が一回終わるたびに呼ばれるのが`更新処理`です。

先ほどのfor文では、一回こんにちはが出力されるたびに更新処理が呼ばれて、$iに1づつ値を足していきます。そしてそれが10になった時に継続条件が満たされfalseになるので繰り返し処理は止まります。

$i++のような形を`加算子`もしくは`インクリメント`と呼びます。
```
$i++;
$i = $i+1;
$i += 1;　　⇦　複合代入演算子と呼ばれている
```
このように色々な書き方があるんですが、上記の3つは意味としては同じになります。
書き方は違いますが、同じ意味を持つものを`シンタックスシュガー`といいます。

```index.php
<?php
 for ($i = 0; $i <10; $i++) {
     $count = $i;
     echo "{$count}回目の繰り返しです。";
 }
?>
```
これを実行すると0回目の繰り返しです。1回目、2回目〜10回目の繰り返し処理です。が出力されます。
”ダブルクォーテーションの後に{}で変数を囲むと`変数展開`といって変数の中身が出力されます。

## breakとcontinue
breakとcontinueはどちらも繰り返し処理（ループ）を制御するためのものです。
`break`は繰り返し処理を途中で終了させる時に使います。
```index.php
<?php
  $int = array(1, 2, 3, 4, -5, 6, 7, 8, 9);
   // 配列の要素数を取得する関数
　$num = count($int);
 
  $message = '含まれていません';

　for ($i = 0; $i < $num; $i++) {
     $value = $int[$i];
     if ($value < 0) {
        $message = '含まれています';
　　　　　break;
     }
  }
  echo $message;
?>
```
このプログラムは、配列の中にマイナスの数が含まれているか調べるためのものです。
パッとみでマイナスの数が含まれているかはわかりますがここではわからないことにします。

上記では一個でもマイナスの数が含まれていればそこで処理を打ち切って、含まれていますと出力されます。このようにマイナスが何個とかではなく一つでも含まれているどうか知りたいときは、それ以上繰り返し処理をする必要はないので、breakを使います。

`continue`は、繰り返し処理をおこなっている中で、ある値の時はそれをスキップして次の繰り返し処理に進める時に使います。
```index.php
<?php
 $int = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
   // 配列の要素数を取得する関数
　$num = count($int);
 
  $sum = 0;

　for ($i = 0; $i < $num; $i++) {
     $value = $int[$i];
     if ($value % 2 === 1) {　　⇦ 奇数の時
        continue;　　⇦ スキップして次へ
     }
     $sum += $value;　　⇦ 偶数が足されていく
 }
  echo $sum;
?>
```
上記の例では配列の中の偶数の値の合計値を求めるプログラムです。
まず、countで配列の要素の数を$numに代入します。その後$valueに配列の$i番目の値を代入します。
そして、if文を使って$valueが奇数の時に処理をスキップして次の処理に行くというプログラムを書きます。
$sumに足されていくのは偶数になるので、これで偶数の合計値が求められます。　

## while文
`while文`もfor文と同じ繰り返し処理を行うのですが、for文よりもシンプルです。

```index.php
<?php
 while(継続条件）{
     //　処理
 }
?>
```
for文と同じで継続条件がtrueの間だけ繰り返し処理を行います。

```index.php
<?php
 初期化式;
　while(継続条件）{
     //　処理
 　　更新式；
　} 
?>
```
したがって上記のように初期化式と更新式を設定することでfor文と同じになります。
複雑な初期化式や複雑な更新式を書く場合は、`while`を使った方が書きやすいといったメリットがあります。
　
## foreach文
`foreach文`は、連想配列の中身を一つずつ取り出したい時に使う構文になります。

```index.php
<?php
 foreach($連想配列 as $変数名) {
      //処理
　}
?>
```
このように書くことで、連想配列の中のvalueの値が一つずつ取り出されて、指定した変数の中に代入されていくという処理を行なってくれます。

```index.php
<?php
 $int = [1, 2, 3, 4, 5];
 
 foreach($int as $value) {  ⇦ $intの値が順番に取り出されて$valueに代入されていく
     echo $value;
 }
?>
```
実はさっきのfor文を用いてマイナスの値が含まれているか調べる方法は、`foreach文`を使った方が簡単に記述する事ができます。

```index.php
<?php
 $int = array(1, 2, 3, 4, -5, 6, 7, 8, 9);
 
  $message = '含まれていません';

　foreach($int as $value) {
     if($value < 0) {
        $message = '含まれています';
　　　　　break;
     }
 }
  echo $message;
?>
```
基本的に配列のvalueを使って何かしたい時は、`foreach`を使って書くといいと思います。
上記の例では、配列の中身を取り出しましたが、連想配列の場合も使う事ができます。

```index.php
<?php
 $fruit = [
     'りんご' => 3,
     'ぶどう' => 2, 
     'みかん' => 4
 ];

 foreach ($fruit as $key => $value) {
     echo "{$key}の個数は{$value}です";
 }

?>
```

りんご、ぶどう、みかんというkeyが$keyに代入されて、3、2、4というvalueが$valueに代入されます。

## 関数
関数というのは、あるデータを与えると、処理されて別のデータが返ってくるというものです。関数には２種類あって、`ビルトイン関数`と`ユーザー定義関数`があります。
ビルトイン関数は、phpの中に初めから備わっている関数のことです。
ユーザー定義関数は、プログラムを作る人が自分で作成する関数のことです。

上記でもいくつか関数が出てきましたが、countやvar_dumpなどのように関数の後に（）でデータを与えて関数を呼び出します。
関数を使うことを`関数を呼び出す`とも言います。
　
```index.php
<?php
 $x = -15;
 $y = abs($x);  ⇦ abs()という絶対値を呼び出す関数
 echo $y;
?>
```
上記の例では＄x内の-15という値の絶対値を呼び出す関数abs()を使っています。
abs()内に呼び出したいデータの値を入れます。そしてその返ってきたデータを＄yに代入しています。
そして、＄yを出力することで、＄xの絶対値がわかるというプログラムになっています。

関数は全て覚える必要はなく、`php公式の関数リファレンス`から自分が使いたい関数を探してくる技術も大切です。

次に`ユーザー定義関数`について解説します。

```index.php
<?php
 function 関数名($仮引数) {
   // 処理
   return 返り値;
 }
 関数名($実引数);　⇦ 変数だけではなく数値などでも良い
?>
```
`function`をつかって関数を定義します。

```index.php
<?php
 function add($x, $y) {
     $z = $x + $y;
     return $z;
 }
 $sum = add(15, 6);
 echo $sum;
?>
```
まずfunctionをつかって関数addを定義します。この時点では仮引数である$x、＄yには値は入っていません。
$zに$x,$yの合計値を代入します。そして返り値で$zをユーザーに返します。

実引数の15、6というのが仮引数である$x,$yに代入されます。
そして返り値である＄zの値がechoによって出力されています。