超PHP初心者に贈るPHPの超初歩的文法

# はじめに
社内でPHP初心者向けのエンジニアに1からあれこれ教えることがあったので、教えたことを纏めとしてここに残しておく。
なお、内容は主にPHPの書き方について。

# コメント
```php
<?php
// 1行コメントはこう
# こうでもいい

/*
複数行コメントはこう
複数行コメントはこう
複数行コメントはこう
*/
```

# 変数
```php
<?php
// sample_value.php

// 変数はデータの入れ物。ちなみに書き換え可能だ
// 書き方はこう↓
// $変数名 = 値;
$value = "Hello World";
echo $value;
```

```
$ php sample_value.php
Hello World
```

# 定数
```php
<?php
// sample_define.php

// 定数はデータの入れ物。ちなみに書き換え不可能だ
// 不変の値を扱う場合に使う
// 書き方はこう↓
// define(定数名, 値);
define("GOOGLE_URL", "https://www.google.co.jp");
echo GOOGLE_URL;
// GOOGLE_URL = "hoge"; // <- 値を変えようとするとエラーになるからな
```

```
$ php sample_define.php
https://www.google.co.jp
```

# データ型
```php
<?php
// sample_datatype.php

// いろいろ型あるけどこれだけ覚えれば当面は戦える、と思う
// 文字列型 string "hoge"
// 整数型 int 123
// 浮動小数点型 float 1.23
// bool型 boolean true/false
// 配列 array array(1,2,3,4,5)
// null 何もないことを示すぞ

// 文字列型の定義
$word = "php";

// 浮動小数点
$float = 1.23;

// bool
$aaa = true;

// 配列
$ary = array(1,2,3,4);

// null
$bbb = null;

// ちなみにPHPは他の言語と違って変数を定義するときに型を指定する必要はないからな。
// 文脈から自動で判断してくれるぞ。やったね。
```

# デバッグ
```php
<?php
// sample_debug.php

// 一番簡単なデバッグはvar_dump()を使うことだ
// 処理の途中に埋め込むことで、その時点の変数の中身を見ることが出来るぞ

$word = "Hello";
var_dump($word);
$word = "Hello PHP!";
var_dump($word);
```

```
$ php sample_debug.php
string(5) "Hello"
string(10) "Hello PHP!"
```

# 四則演算
```php
<?php
// sample_calc.php

// 足し算
$sum = 1 + 2; // 3

// 引き算
$sub = 5 - 1; // 4

// 掛け算
$multi = 2 * 3; // 6

// 割り算
$quotient = 10 / 2; // 5
// 割り算の余り
$remainder = 10 % 3; // 1

// カッコ
$value = (1 + 2) * 3; // 9

// 省略の書き方 ++, --, +=
$i = 1;
$i++; // $i = $i + 1;と同意
$i--; // $i = $i - 1;と同意
$i += 5; // $i = $i + 5;と同意
```

# 文字列
```php
<?php
// sample_string.php

// シングルクォーテーションで囲むと変数展開しない、改行コード(\n)とかの特殊文字も展開しない
// ダブルクォーテーションで囲むと変数展開する、改行コード(\n)とかの特殊文字も展開する
$name = "Taro";
$value1 = "Hello $name\n";
$value2 = 'Hello $name\n';
echo $value1;
echo $value2;

// 文字列の連結はピリオドを使う
$value1 = "Yamada";
$value2 = "Taro";
echo $value1 . $value2;
```

```
$ php sample_string.php
Hello Taro
Hello $name\nYamadaTaro
```

# 配列
```php
<?php
// sample_array.php

// 配列
// 書き方はこう↓
// array(要素1, 要素2, 要素3, ...);
// [要素1, 要素2, 要素3, ...]; php5.4以降はこう書いてもいいぞ
$colors = array("red", "blue", "yellow");
echo $colors[0] . "\n";

// 連想配列
// array(key1 => $value1, $key2 => $value2)
$userScores = array(
    "yamada" => 60,
    "tanaka" => 80,
);
echo $userScores["yamada"] . "\n";

// 2次元配列
// array(array(key => $value), array(key => $value));
$users = array(
    array(
        "login_id" => "yamayama",
        "password" => "123456",
        "name" => "yamada",
        "birthday" => "2000-01-01",
    ),
    array(
        "login_id" => "tanakaaaaaaaaa",
        "password" => "111111",
        "name" => "tanaka",
        "birthday" => "2000-12-31",
    ),
);
echo "{$users[1]["name"]}さんのログインIDは{$users[1]["login_id"]}です\n";
```

```
$ php sample_array.php
red
60
tanakaさんのログインIDはtanakaaaaaaaaaです
```

# 日付
```php
<?php
// sample_date.php

// まずはタイムゾーンを日本時間にあわせるんだ。これを書けばいい
date_default_timezone_set("Asia/Tokyo");

// 今日の日付を求める
echo date("Y-m-d") . "\n";

// 日付を操作するときはdatetimeを使うんだ
$datetime = new DateTime();
echo "今日は" . $datetime->format("Y-m-d") . "\n"; // 今日
$datetime->modify("+1 day");
echo "明日は" . $datetime->format("Y-m-d") . "\n"; // 明日

// 3ヶ月後
$datetime = new DateTime();
$datetime->modify("+3 month");
echo "3ヶ月後は" . $datetime->format("Y-m-d") . "\n"; // 3か月後

// 指定した日付の曜日を求める
$weekday = array("日", "月", "火", "水", "木", "金", "土");
$datetime = new DateTime();
$datetime->setDate(2000, 12, 1);
$w = $datetime->format("w"); // 0,1,2,3,4,5,6の数値が返るぞ、日曜日なら0、土曜なら6だ
echo $weekday[$w] . "\n";

```

```
$ php sample_date.php
2019-03-12
今日は2019-03-12
明日は2019-03-13
3ヶ月後は2019-06-12
金
```

# 疲れたから続きは次回にしよう