PHP入門 その1

# はじめに
PHPの書き方についてまとめてみました。

# 検証に使用した環境
PHP：7.2

# PHPの書き方
PHPはHTMLに埋め込んで使うことができます。
\<?php 〜 ?\>の中に具体的な処理を書いていきます。

## 例えば
### 例）ソースの状態のphpファイル

```html
<html>
  <body>
    <?php echo '<h1>タイトル</h1>'; ?>
  </body>
</html>
```

### レンダリング後
\<?php 〜 ?\>内で実装したh1タグがhtmlに変換されて表示されました。

```html
<html>
    <body>
        <h1>タイトル</h1>
    </body>
</html>
```

## コメント
「//」で記述すると行末までコメントとして扱われます。

```html
<?php
  // コメント
  echo '<h1>コメントサンプル</h1>';
?>
```

## 変数
変数名は、先頭に「\\$」からはじめます。
※変数名は、先頭文字に数字は使えません。（$1hogeなど）

例）変数に「hogehoge」を格納する
```html
<?php
  $hoge = 'hogehoge';
?>
```

## 文字列の出力
「echo」で文字列を出力できます。
文字列はシングル、またはダブルクォーテーションで括ります。

```html
<?php
  echo '<h1>シングルクォーテーション</h1>'; 
  echo "<h1>ダブルクォーテーション</h1>";
?>
```

### 文字列を結合する
「.」を挟むことで、文字列や変数を結合することができます。

```html
<?php
  // 文字列同士を連結した場合
  echo 'hoge'.'hoge'; // hogehogeと表示される

  // 変数と文字列を連結した場合
  $hoge = 'hoge';
  echo $hoge.'hoge'; // hogehogeと表示される
?>
```

#### 省略形
「.=」で連結した文字列を再代入できます。

```html
<?php
  $hoge = 'hoge';
  $hoge .= 'hoge';
  echo $hoge; // hogehogeと表示される
?>
```

#### 変数展開
ダブルクォーテーションで囲んだ文字列の場合、変数を{}で囲むと変数の格納内容が展開されて出力されます。
シングルクォーテーションで囲んだ文字列の場合、変数を{}で囲むと変数名がそのまま出力されます。

```html
<?php
  $hoge = 'hogehoge';
  echo "{$hoge}"; // hogehogeと表示される
  echo '{$hoge}'; // {$hoge}と表示される
?>
```

## 演算子
```html
<?php
  // 足し算
  echo 1 + 1; // 結果：2

  // 引き算
  echo 1 - 1; // 結果：0

  // 掛け算
  echo 2 * 3; // 結果：6

  // 割り算
  echo 6 / 2; // 結果：3

  // 除算
  echo 7 % 2; // 結果：1
?>
```

### 省略形
変数を利用した計算結果を再代入する場合、省略形を使うこともできます。

例）$hogeに1を足して再代入したい場合

```html
<?php
  // 通常だと
  // $hoge = $hoge + 1;  

  // 省略形
  $hoge += 1;  
?>
```

### インクリメント・デクリメント
変数に+1、または-1したい場合、インクリメント・デクリメントを使用できます。

```html
<?php
  // インクリメントで+1
  $hoge++;  

  // デクリメントで-1
  $hoge--;
?>
```

#### 記載位置の違い
++を変数の前に記述すると、+1してから当行の命令文を実行し、
++を変数の後に記述すると、当行の命令文を実行してから+1します。
※--も同様

```html
<?php
  $hoge = 1;

  // +1されてからechoするため、2が表示されます
  echo ++$hoge;
?>
```

```html
<?php
  $hoge = 1;

  // echoされてから+1するため、1が表示されます
  echo $hoge++;  
?>
```

## 条件分岐
### if文
条件分岐にはif文を使います。

```html
<?php
  $hoge = 1;
  if ($hoge > 0) {
    echo "条件に該当しました！";
  }
?>
```

### 比較演算子

| 比較演算子 | 比較内容 |
|-------|-------|
| <　| 左辺は右辺より小さいか？ |
| <=　| 左辺は右辺より小さい、または同じか？ |
| >　| 左辺は右辺より大きいか？ |
| >=　| 左辺は右辺より大きい、または同じか？ |
| ==　| 左辺と右辺は等しいか？ |
| !=　| 左辺と右辺は等しくないか？ |

### 複数条件
and条件の場合は「&&」、or条件の場合は「||」で各条件を繋げます。

```html
<?php
  $hoge = 1;
  
  // $hogeが0より大きく、かつ10未満の場合
  if ($hoge > 0 && $hoge < 10) {
    echo "条件に該当しました！";
  }

  // $hogeが0、または1の場合
  if ($hoge == 0 || $hoge == 1) {
    echo "条件に該当しました！";
  }
?>
```

### 条件の反転
条件式を()で囲み、「!」を先頭に記述することで、対象の条件に式の反転を実現できます。

```html
<?php
  $hoge = -1;
  if (!($hoge > 0)) {
    echo "条件に該当しました！";
  }
?>
```

### else
if文の条件に該当しない場合の処理はelse、elseifで記述します。

```html
<?php
  $hoge = 1;
  if ($hoge > 0) {
    echo "ifの条件に該当しました！";
  } elseif ($hoge == 0) {
    echo "elseifの条件に該当しました！";
  } else {
    echo "どの条件に該当しませんでした！";
  }
?>
```

## switch文
switch文を使うと、複数の条件分岐を記述できます。
switch()で指定した変数等がcaseで指定した各条件に該当する場合、case以下の処理を実行します。
もし、どのcaseにも該当しない場合、default以下の処理を実行します。

[注意]
case以下の処理には、それぞれ「break」を入れてください。
「break」が無い場合、次のcase以下の処理も実行されてしまいます。

```html
<?php
  $hoge = 1;
  switch ($hoge) {
    case 0:
      echo "0に該当しました。";
      break;
    case 1:
      echo "1に該当しました。";
      break;
    case 2:
      echo "2に該当しました。";
      break;
    default:
      echo "どれにも該当しませんでした。";
      break;
  }
?>
```

## 配列
array()で、配列を定義することができます。

```html
<?php
  // 配列を定義
  // array()だけで空の配列を作成し、引数を渡すと初期値として設定してくれます。
  $hoges = array('hoge1','hoge2','hoge3');
  
  // 配列の0番目の値を取得し、出力する
  echo $hoges[0];
  
  // 配列内の要素を別の値に変更する
  $hoges[0] = 'newHoge1';

  // 配列の最後に要素を追加する
  $hoges[] = 'hoge4';
?>
```

### 配列の要素数を取得する
配列に格納されている要素の数を取得するには、count()を使用します。

```html
<?php
  // 配列を定義
  $hoges = array('hoge1','hoge2','hoge3');
  
  // 配列の要素数を取得し、出力する
  echo count($hoges);
?>
```

## 連想配列
配列と同様に複数のデータを扱えます。
連想配列では、キーとなる文字列を指定して個々の要素を管理します。

```html
<?php
  // 連想配列を定義する
  $hoges = array(
            'key1' => 'value1',
            'key2' => 'value2',
            'key3' => 'value3');

  // 連想配列の中身を取得する
  echo $hoges['key1'];

  // 連想配列に要素を追加する
  $hoges['key4'] = 'value4';
  echo $hoges['key4'];
?>
```

### 連想配列の要素数を取得する
連想配列に格納されている要素の数を取得するには、配列と同様にcount()を使用します。

```html
<?php
  // 連想配列を定義
  $hoges = array(
            'key1' => 'value1',
            'key2' => 'value2',
            'key3' => 'value3');
  
  // 連想配列の要素数を取得し、出力する
  echo count($hoges);
?>
```

## 繰り返し
### for文
繰り返し処理はfor文で記述します。
記述方法は以下の通り。

```html
for ( 初期化処理 ; 繰り返し条件 ; 変数の更新処理) {
  繰り返す　処理
}
```

```html
<?php
  $hoges = array('hoge1','hoge2','hoge3');
  for ($i = 0; $i < count($hoges); $i++) {
    echo $hoges[$i];
  }
?>
```

#### 意図的な無限ループとbreak文
for文に記述する初期化処理、繰り返し条件、変数の更新処理は、それぞれ省略が可能です。
そのため、以下のように無限ループを実装し、繰り返し処理の中でbreak文で抜けることも出来ます。

```html
<?php
  $hoges = array('hoge1','hoge2','hoge3');
  $i = 0;
  for (; ;) {
    if ($i >= count($hoges)) {
      break;
    }
    echo $hoges[$i];
    $i++;
  }
?>
```

#### continue文
continue文を使うことで、continue文以降の繰り返し処理をスキップ出来ます。

例）1番目の配列要素はスキップし、各要素を出力する

```html
<?php
  $hoges = array('hoge1','hoge2','hoge3');
  for ($i = 0; $i < count($hoges); $i++) {
    if ($i == 0) {
      continue;
    }
    echo $hoges[$i];
  }
?>
```

### while文
while文でも繰り返し処理を記述できます。
while文に記述する条件式がtrueの間、処理を繰り返します。

for文と違い、初期化処理、変数の更新処理はないため、while文の内外で意図しない無限ループにならないように注意が必要です。

```html
<?php
  $hoges = array('hoge1','hoge2','hoge3');
  $i = 0;
  while ($i < count($hoges)) {
    echo $hoges[$i];
    $i++;
  }
?>
```

### foreach文
配列、連想配列の要素を先頭から順に取り出して処理を繰り返します。
「as」の後に定義された変数に、各繰り返し処理で取り出された要素が代入されます。

```html
<?php
  $hoges = array('hoge1','hoge2','hoge3');
  foreach ($hoges as $hoge) {
    echo $hoge;
  }
?>
```

#### キー変数
foreach文の各繰り返し処理では、配列（連想配列）の内容とキー変数、値変数にそれぞれ代入されます。
値変数には要素そのものが入り、
キー変数には、配列ではインデックス、連想配列ではキーが代入されます。
※キー変数は省略可能です。

```html
<?php
  $hoges = array('hoge1','hoge2','hoge3');
  foreach ($hoges as $index => $hoge) {
    echo "インデックス番号:".$index."、要素:".$hoge."<br>";
  }
?>
```

## 関数
### 組み込み関数
PHPには、最初から組み込まれている関数があります。

#### 指定した文字列の文字数を返す strlen(arg)
例）「hoge」の文字数である4を出力する

```html
<?php
  echo strlen("hoge");
?>
```

#### 配列の要素数を返す count(arg)
例）「hoges」配列の要素数である3を出力する

```html
<?php
  $hoges = array('hoge1','hoge2','hoge3');
  echo count($hoges);
?>
```

#### 配列の要素数を返す count(arg)
例）1〜10でランダムな整数を出力する

```html
<?php
  echo rand(1, 10);
?>
```

### 関数を定義する
以下の形式で関数を定義することが出来ます。

```html
<?php
  function 関数名(引数1, 引数2, ....) {
    return 返り値; // 省略可
  }
?>
```

例）関数を呼び出して配列の各要素を改行しながら出力する
```html
<?php
  // 関数を定義
  function echoWithBr($arg) {
    $ret = $arg."<br>";
    echo $ret;
    return $ret;
  }

  $hoges = array('hoge1','hoge2','hoge3');
  foreach($hoges as $hoge) {
    // 関数を呼び出す
    echoWithBr($hoge);
  }
?>
```