【PHPノート】基本構文

## はじめに
PHPを習得する必要が出てきたので、公式ドキュメントを参考にしながら学習をスタートさせました。
インプットの定着のためのアウトプットとして自分の言葉で書き残していこうと思います📝
　
**筆者レベル感**
- PHPの名前は知ってる
- フレームワークには、Laravelとかがあることは知ってる
- でも実際コードを読んだこと、書いたことは一切ない
    - （→ 学習の第一歩としてProgateと公式の簡易チュートリアルをやりました）
- これまでに触れてきたのはJavaScript, TypeScript, Python

# PHPタグ
- 基本のPHPタグ
    ```php3
    <?php echo "<?php と ?> で囲みます。" ?>
    ```
　
- PHPタグの短縮表記
    ```php3
    <?= "これは<?php echo を短縮した書き方です。" ?>
    <?= " <?php ?> だけを短縮して書くと <? ?> になります。" ?>
    <? echo "これでもこの文章を出力することができます。" ?>
    <?php echo 'XHTMLまたはXMLドキュメントの中でPHPコードを扱う場合 → <?php ?> を使う' ?>
    ```
　
- 短縮した表記は設定で有効/無効を切り替えできる
    - デフォルト値 = `1(有効)`
    - `0`にすることで無効化できる
        ```ini
        short_open_tag=0
        ```
　
 - ファイルの中にPHPコードしかない場合、閉じタグは省略する
     ```php3
     <?php
     echo "このファイルにはPHPコードしか書かれていません";
     echo "この時は閉じタグは省略しちゃいます";
     echo "省略が推奨される理由は以下のとおりです";
     echo "終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるから";
     ```
# HTMLとPHP
PHPはHTMLに組み込んで使用可能です。
```php3:sample
<p> ここは普通のHTMLです。 </p>
<?php echo "ここはPHPコードとしてパーサが認識してパースします" ?>
<p> ここは普通のHTMLです。パーサはここは無視します。 </p>
```

条件式を用いる時には以下のように書きます。
いずれも処理内容自体は同じものを、違う方法で記述しています。

> ※コメントにてご指摘いただいた箇所を加筆修正いたしました。（代替構文と通常構文のやっていることは同じという表現の修正）


- 代替構文: 多くのテキストを出力する場合などではこの書き方が○
    - HTMLとPHPが混在するため、改行やスペースが出力に影響を与える可能性がある
    - endifのあとの ; を忘れない！
        ```php3:if_else
        <?php if($arg): ?>
            <p>条件式がtrueならこの文章が表示される</p>
        <?php else: ?>
            <p>条件式がfalseの時にはこっちの文章が表示される</p>
        <?php endif; ?>
        ```
　
- 通常構文: 冗長になりやすいので短め、簡潔な記述のときに使用が○
    - echo を使って出力するため、改行やスペースを制御できる
        ```php3:if_else
        <?php
        if($arg) {
            echo "<p>条件式がtrueの時にこの文章が表示される</p>";
        } else {
            echo "<p>条件式がfalseの時にはこっちの文章が表示される</p>";
        }
        ?>
        ```

# ソースコード内のコメントの書き方
```php3: comment
<?php
echo '//で単一行のコメントが挿入できます'; // ここはコメント部分です(C++型)
echo '#を単一行コメントに使用することもできます'; # ここもコメント部分です(シェル型)
echo '/* ~~~~ */ で複数業のコメントを挿入できます';
/* 複数行用のコメント
   もう一行分のコメント */
?>
```
![スクリーンショット 2024-11-15 11.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827754/b28c51a9-89b9-780b-3169-91127a5ed29b.png)
↓
![スクリーンショット 2024-11-15 11.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827754/29047a82-c28e-8303-de7e-a041d9d3e46b.png)

#### HTMLに囲まれたPHPコードの中でコメント `//` `#` を使うと...
```html: comment
<h1>HTMLの中で <?php # echo "コメントを入れてみます"; ?> コメントを入れてみます </h1>
<p> この場合の出力: HTMLの中で コメントを入れてみます</p>

<h2>C++型のコメントも <?php // echo "HTMLの中に"; ?>入れてみます </h2>
<p> この場合の出力: C++型のコメントも 入れてみます</p>
```
![スクリーンショット 2024-11-15 11.37.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827754/5c65f41e-9cb0-52e2-4852-6884a7b4545a.png)
↓
![スクリーンショット 2024-11-15 11.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827754/25282665-3fd5-897a-d408-8aeab1343fd8.png)

#### 複数行用のコメント `/* ~~ */` が入れ子になってしまうと...
```php3: comment
<?php
/*
 echo "コメントを入れ子にしてみると？"
 /* 問題が起こります */
*/
```
![スクリーンショット 2024-11-15 11.30.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827754/368082b3-349e-d163-75e4-0f3692036699.png)
↓
![スクリーンショット 2024-11-15 11.30.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827754/dff1760f-90b2-6483-3697-f3fe9cb61fda.png)
入れ子になっているコメントの閉じ部分 `*/  (スクショ67行目)`でコメントが終わりと判断されて、
最後に残された `*/ (スクショ68行目)` がエラーの原因となる。

## おわりに
都度コードの挙動など確認しながら記述していますが、
もし間違いや誤解を招きそうな表現などなどありましたら
大変お手数ですがご指摘をいただけますと幸いです🙏