PHP基礎メモその1

#PHPの書き方
PHPはHTMLに埋め込んで使うことができる。<?php ?>の中にPHPの命令を書いていく。
<?php ?>の部分がHTMLに変換された上で表示される。
>```php:PHPのコード
<html>
  <head></head>
  <body>
    <h1>PHP</h1>
    <?php echo '<h2> 初級 </h2>'; ?>
  </body>
</html>
```
>```html:HTMLに変換されたコード
<html>
  <head></head>
  <body>
    <h1>PHP</h1>
    <h2> 初級 </h2>
  </body>
</html>
```

#PHPの文法
PHPでは文末にセミコロン『;』を使って文を区切る。セミコロンを忘れるとエラーが起きるので注意する。
>```php:index.php
<?php
  // 末尾にセミコロンをつける！
  echo 'こんにちは';
  echo 'PHPを学ぼう';
?>
```

#文字列を出力
『echo』は文字列などを出力するための命令である。文字列を出力する場合はシングルクォーテーション『'』かダブルクォーテーション『"』で囲む。
>```php
<?php echo "Hello, World!"; ?>
// 結果 Hello, World!
>
<?php echo 'Hello, PHP!'; ?>
// 結果 Hello, PHP!
```

#計算
>```php
echo 7 + 3;
echo 2 - 1;
echo 3 * 6;
echo 4 / 2;
echo 5 % 2;
```

#変数
頭に『＄』記号をつけることにより変数を定義できる。『＄変数名 = 値;』で様々な値を変数に入れることができる。
>```php 
<?php
  $name = 'Bob';
  echo $name;
?>
```

結果
Bob

>```php
// 正方形の面積を計算
$length = 7;
$area = $length * $length;
echo $area;
```

結果
49

#文字の連結
『.』記号を用いると文字を連結することができる。
>```php
$lesson = 'PHP';
echo $lesson.'入門';
// 結果: PHP入門
>
$level = '入門';
echo $lesson.$lrvel;
// 結果: PHP入門
```

『.=』を用いると変数の文字列の連結を省略して書くことができる。
>```php
$name = '山田';
$name .= '太郎';
// $name = $name.'太郎'と同じ意味
>
echo $name;
```

結果
山田太郎

#変数展開
>```PHP
$name = 'takahashi';
echo "こんにちは、{$name}さん";
// 結果: こんにちは、takahashiさん
>
// シングルクォーテーションで囲んだ場合は変数展開されない
echo 'こんにちは、{$name}さん';
// 結果: こんにちは、{$name}さん
```

#if文 else elseif文
if文を使うと条件に応じて処理を分岐できる。
>```php
$x = 20;
if ($x > 10) {
  echo '$xは10より大きい';
}
```

結果
$xは10より大きい

elseはifの条件がfalseであった場合、elseの処理が実行される。
>```php
$x = 20;
if ($x == 30) {
  // 処理は実行されない
  echo '$xは30です';
} else {
  // 処理は実行される
  echo '$xは30ではありません';
}
```

結果
$xは30です

elseifを用いることで、多岐分岐が可能になる。
>```php
$x = 20;
if ($x > 30) {
  // falseであるため実行されない
  echo '$xは30より大きい';
} elseif ($x >= 20) {
  // trueであるため実行される
  echo '$xは30以下20以上';
} else {
  // すでに当てはまる条件があったため実行されない
  echo '$xは20より小さい';
}
```

結果　
$xは30以上20以下

#論理演算子
『&&』は『かつ』、『||』は『または』
>```php
$x = 20;
if ($x > 10 && $x < 30) {
  echo '$xは10より大きい、かつ30より小さい';
}
if ($x < 10 || $x > 30) {
  echo '$xは10より小さい、または30より大きい';
}
```

結果
$xは10より大きい、かつ30より小さい

#条件の否定
『!』も論理演算子の1つであり、条件の否定ができる。
条件の否定は条件式のtrueとfalseが逆になる
>```php
$x = 20;
if (!($x == 30)) {
  echo '$xは30ではない';
}
```

結果
$xは30ではない

#switch文
switch文はswitch(式)の(式)がcaseの値と一致したとき、そのブロックが実行される。caseのどれにも一致しなかった時、defaultのブロックが実行される。
>```php
switch ($coin) {
  case 0:
    echo '表';
    break;
  case 1:
    echo '裏';
    break;
  default:
    echo 'エラー';
    break;
}
```

caseブロックの最後にはbreak命令を指定する。break命令は現在のブロックから脱出するための命令である。break命令がないと、後ろに続くcaseブロックが続けて実行される。

#配列
配列の基本構文は『＄配列名 = array (値1,値2,・・・);』となっている。
配列のデータには先頭から0,1,2,・・・と順にインデックス番号が割り振られている。
配列のデータを取り出すにはインデックス番号を用いて＄配列名[インデックス番号]とする。
>```php
$name = array('jhon', 'kate', 'bob');
>
echo $names[0];
// 結果: john
>
echo $names[1];
// 結果: kate
```

値の追加は、『＄配列名[] = 値;』とすることで追加できる。
すでに存在するインデックス番号を指定すると、配列の値を上書きすることもできる。
>```php
$names = array('john', 'kate', 'bob');
// 配列の末尾に値を追加する
$names[] = 'Mary'; 
echo $names[3];
// 結果: Mary
>
// 値の上書き
$names[1] = 'jane'
echo $names[1]; 
// 結果: jane
```

#連想配列
＄配列名 = array('キー名' => '値1', ・・・); のように、 => を用いてキーと値をセットする。
>```php
$user = array(
  'name'   => 'emi',
  'age'    => 14,
  'gender' => 'male'
);
```

値の取り出すには、対応するキーを用いて『配列名[キー];』のようにする。
>```php
$user = array(
  'name' => 'dai',
  'age'  => 14
);
>
echo $user['name'];
// 結果: dai
```

『配列名[キー] = 値;』のようにすることで、連想配列にデータを追加することができる。
>```php
$user['level'] = 'beginner';
```

#for文
for文は、 for (①初期化; ②ループの条件; ④変数の更新) { ③繰り返す処理; }　のように書く。
>```php
for ($i = 1; $i <= 100; $i++) {
  echo $i.'<br>';
}
```

結果
1
2
3
・
・
・
100

#while文
while文は
>```php
①初期化
while (②ループの条件 ) {
  ③繰り返す処理;
  ④変数の更新;
}
```

のように書く。

>```php
$i = 1;
while ($i <= 100) {
  echo $i;
  $i++;
}
```

#break文
break文は現在のループを強制的に中断する命令である。
>```php
for ($i = 1; $i <= 10; $i++) {
  if ($i > 5) {
    // $iが6になった段階でfor文を終了
    break;
  }
  echo $i;
}
```

結果
12345

#continue文
continue文は現在の週だけスキップし、ループそのものは継続して実行する。
>```php
for ($i = 1; $i <= 10; $i++) {
  if ($i % 3 == 0) {
    continue;
  }
  echo $i;
}
```

結果
123457810 (3の倍数)

#foreach文
foreach文は配列または連想配列に対して、先頭のデータから順に繰り返し処理を行うための命令である。
『as』の後ろの変数に、ループの度にデータが先頭から順に代入される。
>```php
$towns = array('東京', '大阪', '京都');
foreach ($towns as $town) {
  echo $town.' ';
}
```

結果
東京 大阪 京都

foreach文では、配列内のデータが順次『キー変数』、『値変数』に代入され、それに対して処理が繰り返し適用される。
>```php
foreach (配列 as 値変数) {
  繰り返したい処理;
}
foreach (配列 as キー変数 => 値変数) {
  繰り返したい処理;
}
```

下記のコードでは果物の名前を『キー』として、その色を『値』として保持している連想配列である。
1週目のループでは＄keyに'Apple'、＄valueに'Red'が、2週目のループでは＄keyに'Banana'、＄valueに'Yellow'が入っている。

>```php
$colors = array(
  'Apple'  => 'Red',
  'Banana' => 'Yellow',
  'Grape'  => 'Purple'
  );
foreach ($colors as $key => $value) {
  echo $key.':'.$value.' ';
}
```

結果
Apple:Red Banana:Yellow Grape:Purple

#関数
関数はあるまとまった処理を行い、値を返すものである。
関数には元から組み込まれているものが有り、それらは組み込み関数と呼ばれている。

strlen
strlenは組み込み関数の一つで、文字列の文字数を返す。
（）の中に与える値を引数という。

>```php
echo strlen('takahashi');
// 結果 : 7
```
```php
$user = 'ken'
echo strlen($user);
// 結果 : 3
```

count
配列の要素の数を返す関数
>```php
$towns = array('東京', '大阪', '京都');
echo count($towns);
// 結果 : 3
```

rand
ランダムな整数を返す関数
>```php
echo rand(1, 4);
// 1〜4のランダムな整数を返す
// 結果 : 2 
```

#関数の作成
関数は『function 関数名(){処理}』という書き方をする。
>```php
function hello() {
  echo 'Hello, World!';
}
```

呼び出すには『関数名()』で呼び出す。
>```php
hello();
```

結果
Hello, World!

#引数
引数を関数内で使うには、それを受け取るための『仮引数』を関数の定義時に指定しておく必要がある。
仮関数が複数ある場合はカンマ（,）を用いて指定する。

関数の定義
>```php
function printSum($num1, $num2) {
  echo $num1 + $num2;
}
```

関数の呼び出し
>```php
printSum(1, 3);
```

結果
4

#戻り値
戻り値は『return』で指定する。

関数の定義
>```php
function getSum($num1, $num2) {
  return $num1 + $num2;
}
``` 

関数の呼び出し
>```php
$sum = getSum(1, 3);
echo $sum;
```

結果
4

# formタグ(HTML)
フォームを作りたいときは、HTMLの＜form＞タグを用いる。
action属性にはデータを渡す先のURLを指定する。
method属性は値の送信方法で、『get』と『post』のどちらかを指定する。
getの場合は送信される値がurlに表示され、postの場合はurlに表示されない。
>```php
<form action="url" method="post">
// フォームの内容
</form>
```

#テキストボックス
テキストボックスを作るにはHTMLの＜input type="text"＞を使う。
name属性は入力された値を取得する時に使う名前である。
>```php
<form action="url" method="post">
  email
  <input type="text" name="email">
                     // 入力データに名前をつける
  内容
  <textarea name="content"></textarea>
  // textareaは閉じタグが必要
>
  // 送信ボタン
  <input type="submit" value="送信">
</form>
```

#フォームのデータを受け取る
フォームで送信した値を受け取るには『＄_POST』を使用する。
『＄_POST』は連想配列になっている。[]の中に、＜input＞と＜textarea＞のname属性に指定した値を入れることで、それぞれの送信した値を受け取ることができる。
>```php:index.php
<form action="url" method="post">
>
  <input type="text" name="name">
>
  <input type="text" name="email">
>  
  <input type="submit" value="送信">
>
</form>
```
```php:sent.php
<?php echo $_POST['name']; ?>
<?php echo $_POST['email']; ?>
```

＄_POSTの中身は連想配列になっている
>```php:$_POSTの中身
array(
  'name' => 'takahashi',
  'email' => 'ddd@d.com'
)
```

#セレクトボックス
セレクトボックスは＜select＞タグの中に＜option＞タグを並べる。
>```php:index.php
<form action="sent.php" method="post">
  <select name="fruit"> 
    <option value="apple" >りんご</option>
    <option value="banana">ばなな</option>
    <option value="orange">みかん</option>
  </select>
</form>
```
```php:sent.php
<?php echo $_POST['fruit']; ?>
```

#繰り返し処理と変数展開
繰り返し処理と変数展開を用いて多数のoptionタグを作成する。
>```php
for ($i = 1; $i < 4; $i++) {
  echo "<option value='{$i}'>{$i}</option>";
}
```