【PHPノート】定義済み変数

## はじめに
PHPを習得する必要が出てきたので、公式ドキュメントを参考にしながら学習をスタートさせました。
インプットの定着のためのアウトプットとして自分の言葉で書き残していこうと思います📝
　
**筆者レベル感**

- PHPの名前は知ってる
- フレームワークには、Laravelとかがあることは知ってる
- でも実際コードを読んだこと、書いたことは一切ない
    - （→ 学習の第一歩としてProgateと公式の簡易チュートリアルをやりました）
- これまでに触れてきたのはJavaScript, TypeScript, Python
---
# 定義済み変数
PHPが組み込みで提供する特定のグローバル変数のことで、特定の情報を保持したり、特定の機能に関する情報を提供する。

### `$GLOBALS`
- グローバルスコープで使用可能なすべての変数への参照
    ```php3:global
    <?php
    
    function test()
    {
        // 現在のスコープで定義された'foo'
        $foo = "local variable";
        
        // グローバルスコープで定義された'foo'を参照
        echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    
        // 現在のスコープ内で定義された'foo'を参照
        echo '$foo in current scope: ' . $foo . "\n"; 
    }
    
    // グローバルスコープで定義された'foo'
    $foo = "Example content";
    
    test();
    
    // 出力：
    // $foo in global scope: Example content
    // $foo in current scope: local variable
    
    ?>
    ```
### `$_SERVER`
- サーバー情報、実行時の環境情報を提供
- `$_SERVER["SERVER_NAME]`のように記述することでその値にアクセスができる
    - `PHP_SELF`
        - 現在実行しているスクリプトのファイル名
    - `ARGV`
        - スクリプトに渡された引数の配列
    - `ARGC`
        - スクリプトに渡されたコマンドライン引数の数
    - `GATEWAY_INTERFACE`
        - サーバーが使用するCGIのバージョン
    - `SERVER_ADDR`
        - 現在のスクリプトが実行されているサーバーのIPアドレス
    - `SERVER_NAME`
        - 現在のスクリプトが実行されているサーバーのホスト名
        - バーチャルホスト上の場合にはそのバーチャルホスト名
    - `SERVER_SOFTWARE`
        - レスポンスヘッダ上のサーバーの認識文字列
    - `SERVER_PROTOCOL`
        - ページがリクエストされたときのプロコル名とバージョン
    - `REQUEST_METHOD`
        - リクエストのメソッド名
    - `REQUEST_TIME`
        - リクエスト開始時のタイムスタンプ
    - `REQUEST_TIME_FLOAT`
        - リクエスト開始時のタイムスタンプ（マイクロ秒まで）
    - `QUERY_STRING`
        - ページアクセス時の検索引数
    - `DOCUMENT_ROOT`
        - 現在実行されているスクリプトが存在するドキュメントルートディレクトリ
        - サーバーのconfigurationファイルで定義される
    - `HTTPS`
        - HTTPSプロトコルで実行されている場合にはからではない値が格納される
    - `REMOTE_ADDR`
        - 現在ページを閲覧しているユーザーのIPアドレス
    - `REMOTE_HOST`
        - 現在のページにアクセスしているホスト名
    - `REMOTE_PORT`
        - ユーザーのマシンからWebサーバーへの通信に使用されているポート番号
    - `REMOTE_USER`
        - 認証済みユーザー
    - `REDIRECT_REMOTE_USER`
        - リクエストが内部でリダイレクトされた場合の認証ユーザー
    - `SCRIPT_FILENAME`
        - 現在実行されているスクリプトの絶対パス
    - `SERVER_ADMIN`
        - Webサーバー設定ファイルの｀SERVER_ADMIN`にセットされた値
    - `SERVER_PORT`
        - Webサーバーの通信ポートとして使用されているポート番号
    - `SERVER_SIGNATURE`
        - サーバー上で生成されたページに追加されるサーバーのバージョン名とバーチャルホスト名
    - `PATH_TRANSRATED`
        - バーチャルからリアルへのマッピング後の、現在のスクリプトのファイルシステム上でのパス
    - `SCRIPT_NAME`
        - 現在のスクリプトのパス
        - スクリプト自身のページ指定時に便利
    - `REQUEST_URI`
        - ページアクセスのためのURI
        - ex: index.html
    - `PHP_AUTH_DIGEST`
        - HTTPダイジェスト認証の場合、クライアントから送信されたAuthorizationのヘッダ内容
    - `PHP_AUTH_USER`
        - HTTP認証時のユーザー名
    - `PHP_AUTH_PW`
        - HTTP認証時のユーザーのパスワード
    - `AUTH_TYPE`
        - HTTP認証時の認証形式の値
    - `PATH_INFO`
        - スクリプトファイル名とクエリの間にあるクライアント提供のパス名
    - `ORIG_PATH_INFO`
        - PHP処理前のPATH_INFO
### `$_GET`
- HTTP GET変数
- URLパラメータ（query string）で現在のスクリプトに渡された変数の連想配列
    ```php3:get
    <?php
    echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
    
    // 上記に対して 'http://example.com/?name=Hannes'と入力した場合
    // $_GET["name"] = Hannesなので
    // 出力：Hello Hannes!
    ?>
    ```
### `$_POST`
- HTTP POSTメソッドから渡された変数の連想配列
```php3:post
<?php
echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!';

// name=Hannes とPOSTした場合の出力：
// Hello Hannes!

?>
```
### `$_FILES`
- POSTメソッドでアップロードされた項目の連想配列
    - ファイル名、タイプ、サイズなどファイルに関する情報
### `$_REQUEST`
- `$_GET`, `$_POST`, `$_COOKIE`の内容をまとめた連想配列
### `$_SESSION`
- 現在のスクリプトで使用可能なセッション変数を含む連想配列
### `$_ENV`
- 環境変数として源氏あのスクリプトに渡された変数の連想配列
### `$_COOKIE`
- HTTPクッキーから渡された変数の連想配列
### `$php_errormsg`
- 直近のエラーメッセージ
- PHP7.2.0 以降非推奨 → 代替で`error_get_last()`を使用
### `$http_response_header`
- HTTPラッパーを使用する場合にHTTPレスポンスヘッダが格納される
- `get_headers()`に似ている
### `$argc`
- コマンドラインから実行した場合の、スクリプトに渡された引数の数
### `$argv`
- コマンドラインから実行した場合の、スクリプトに渡された引数の配列

## 最後に
公式ドキュメントをもとに自分なりに調べたりして解釈したものを掲載していますが、誤認があったり、誤解を与えるような表現があった場合には 大変お手数ですがご指摘をいただけますと幸いです🙏