PHPの基本文法


##はじめに
PHPを学びたてのコテコテの初心者です。
間違ってる点などあれば、ご指摘いただければ幸いです。

##print構文

```php:qiita.php
<?php
print ("PHPを勉強中です！！");
?>
```

ダブルコーテーションを表示させたい時は**エスケープシーケンス**を使用する


```php:qiita.php
<?php
print ("PHPを勉強中です！\"kirin\"");
?>
```

###簡単なエスケープシーケンスのまとめ

| エスケープシーケンス | 効果 | 
|:-----------|------------:|
| \n      | 改行        |
|\r  | キャリッジリターン      | 
| \t       | タブ        |
| \\         | \          | 
| \＄    | ＄     | 
| \"    | "     | 
| \'    | '     | 

>キャリッジリターンとは
カーソルを先頭に戻す制御文字

##算術演算子
””で囲むと文字列と評価されるので**注意**


```php:qiita.php
<?php
print (1+1);#2
?>
```

組み合わせて複雑な計算も可能

```php:qiita.php
<?php
print ((100**3+12)*3);#3000036
?>
```


###簡単な演算子のまとめ

| 記号| 効果 | 
|:-----------|------------:|
| +      | 足し算        |
|-  | 引き算      | 
| *       | 掛け算        |
| **       | n乗        |
| /         | 割り算         | 
| %    |  剰余算    | 

##date
>date ( string $format [, int $timestamp = time() ] ) : string
引数を２つもてる

画面が表示される度に時刻が変化
date functionを使用し、日時の取得ができるが表示まではできない

>https://www.php.net/manual/ja/function.date.php

日付、曜日の表示

```php:qiita.php
<?php
print (date('F/j/Y'));
#表示結果：August/27/2020
?>
```

###dateの指定文字

| 記号| 効果 |  使用例 | 
|:-----------|------------:|------------:|
| Y      | （4桁表示）年        |2020        |
|y  | （2桁表示）年      | 20        |
|m        | (2桁表示）月        |08        |
|M        | (英語表示）月        |Aug        |
|F        | (英語表示）月        |August      |
|n          | (0を消す)月         | ８        |
|d          | 日         | 15        |
|H     |  (24時間表示)時間    | 15        |
|h     |  (12時間表示)時間    | 3        |
|i     |  分    | 59        |
|s     |  秒    | 59        |
|t     |  月の日数    | 31        |
|D          | (3文字)曜日         | Sat        |
|w     |  曜日を数値化(0-6)    | 6        |



時間の表示も可能
日本時間を表示するためには<font color="Red">タイムゾーンの設定が必要</font>

```php:qiita.php
<?php
print (date('G時　i分 s秒'));
?>
```

タイムゾーンの設定は次のように行う

```php:qiita.php
<?php
date_default_timezone_set('Asia/Tokyo');
print (date('G時　i分 s秒'));
?>　
```

###文字列を連結
""が必要な文字列を.を用いることでつなぐことができる

```php:qiita.php
<?php
date_default_timezone_set('Asia/Tokyo');
print ('現在の時刻：'.date('G時 i分 s秒'));
?>　
```

###オブジェクト指向型
formatはメソッドと呼ばれ、取得した時間を整形している
DateTime()は様々な日付や時間のメソッドを持つオブジェクト

**PHPには手続き型とオブジェクト指向型が混在している**

```php:qiita.php
<?php
date_default_timezone_set('Asia/Tokyo');
$today = new DateTime();
print ($today ->format('G時 i分 s秒'));
#表示結果：8時 12分 09秒　
?>　
```

###timeスタンプ
1970年1月1日からの経過時間を返す

```php:qiita.php
<?php
    print (time())
    ?>
```

###strtotime
strings to time
文字列で指定したものをタイムスタンプに変換する

```php:qiita.php
<?php
    print (date('n/j(D)')."\n");
    //    表示結果：8/27(Thu)
    print (date('n/j(D)',strtotime("+2day")));
    //    表示結果：8/29(Sat)
    ?>
```

##変数

**PHPの変数の特徴**
* 変数名は＄ではじめる
* 英語、日本語、数字で命名可能
* 記号、空白は使えない
* 先頭数字も不可
* 大文字小文字の区別される
* 基本的には小文字で書かれる
* ''があれば文字列として格納



```php:qiita.php
<?php $sum = 100 + 200 + 300; ?>
    合計金額は：<?php print ($sum); ?>円です
#表示結果：合計金額は600円です
    税込み：<?php print ($sum*1.1); ?>円です
#表示結果：税込み660円です
```

##while構文
* 初期化処理
* 繰り返す条件 
* 繰り返し処理
* 更新処理


```php:qiita.php
<?php
    $i =1;
    while ($i <= 10){
        print ($i."\n");
        $i += 1;
    }
    ?>
```

**endwhile**を使ってもかける

```php:qiita.php
<?php
    $i =1;
    while ($i <= 10):
        print ($i."\n");
        $i += 1;
    endwhile;
    ?>
```

###比較演算子

| 記号| 効果 |
|:-----------|------------:|
| A < B      | AはBより小さい |
|A <= B  | AはB以下 | 
|A === B        | AとBは等しい        |
|A !== B        | AとBは等しくない        |
|!A        | Aではない  |

###インクリメント・デクリメント
割り算、掛け算は１を掛けても、割っても値は変わらないためインクリメントのようなものは存在しない

| 記号| 効果１ |効果２ |
|:-----------|------------:|------------:|
| $i = $i + 1      | $i += 1 | $i ++ |
| $i = $i - 1      | $i -= 1 | $i -- |


##for構文
for(初期化処理; 繰り返し条件; 更新処理;){
   繰り返したい処理;
}

```php:qiita.php
<?php
    for ($i=1; $i<=10; $i++){
        print ($i."\n");
    }
    ?>
```

{}ではなく**endfor**を使ってもかける

```php:qiita.php
<?php
    for ($i=1; $i<=10; $i++):
        print ($i."\n");
    endfor;
    ?>
```



一年後までの日と曜日を出力

```php:qiita.php
<?php
    for($i=0; $i<=365; $i++){
        print (date('Y/n/j(D)',strtotime("+".$i."day")));
        print "\n";
    }
    ?>
```

##配列
array()はPHP4.5以前で使用されていた
配列を表示させるにはインデックスを指定する必要がある

曜日を日本語で出力させたい時

```php:qiita.php
<?php
    $week_name = ["日","月","火","水","木","金","日"];
    print($week_name[date('w')]);
    ?>
```



###連想配列
keyを指定することで配列の順序によらずリストから値を取り出せる

```php:qiita.php
<?php
    $drink = ['お茶'=>'tea',
        "コーラ"=>'coke',
        "コーヒー"=>'coffee',
        "ワイン"=>'wine'];
    print ($drink["お茶"]);
    #tea
    ?>
```

###foreach構文
配列専用の構文
各要素を繰り返し出力可能

```php:qiita.php
<?php
    $drink = ['お茶'=>'tea',
        "コーラ"=>'coke',
        "コーヒー"=>'coffee',
        "ワイン"=>'wine'];

    foreach ($drink as $val){
        print ($val."\n");
    }
    ?>
```

出力結果

```
tea
coke
coffee
wine
```

インデックスも取り出したい場合

```php:qiita.php
<?php
    $drink = ['お茶'=>'tea',
        "コーラ"=>'coke',
        "コーヒー"=>'coffee',
        "ワイン"=>'wine'];
    foreach ($drink as $japanese => $english){
        print ($japanese." : ".$english."\n");
    }
    ?>
```


出力結果

```
お茶 : tea
コーラ : coke
コーヒー : coffee
ワイン : wine
```


##if構文


```php:qiita.php
<?php
    date_default_timezone_set('Asia/Tokyo');
    if(12 <= date("G")){
        print ("ランチ食べられます");
    }
    else{
        print ("ディナータイムです");
        }
    ?>
```

文字列が空ならFalse,それ以外はTrue
数値が０ならFalse、それ以外はTrue

##切り上げ、切り捨て、四捨五入
floorで切り捨て

```php:qiita.php
<?php
    print (floor(10/4))
//    2
    ?>
```

ceilで切り上げ

```php:qiita.php
<?php
    print (ceil(10/4))
//    3
    ?>
```

roundで四捨五入
引数が2つ目は小数点第何位まで持つか

```php:qiita.php
<?php
    print (round(1/3,3))
//    0.333
    ?>

```


##sprintf
桁数をそろえる事が可能

<font color="Red">dは数値</font>を示しているので文字列を入れた場合は0が出力される


```php:qiita.php
<?php
    $date = sprintf("%04d年　%02d月　%02d日", 2020,8,27);
    print ($date);
//    2020年　08月　27日
    ?>
```

文字列はsを使う

```php:qiita.php
<?php
    $date = sprintf("%04d年　%02d月　%02d日　%s", 2020,8,27,"木");
    print ($date);
//    2020年　08月　27日　木
    ?>
```