PHP Laravel オブジェクト指向 用語集

# 目的

- Laravelの最低限理解しておきたい用語をまとめる

# 事前情報

- 必要な物が出てきたら随時追記してゆく。
- Laravelに限らず、PHPやその他のフレームワーク、オブジェクト指向に関する用語なども一緒に記載する。
- 筆者のメモ的要素が強いので

# クラス

- オブジェクト指向でよく設計図に例えられるものである。

# インスタンス

- クラスを元に作られた複製の事である。
- `$変数名 = new クラス名(引数);`として作ることができて変数の中にインスタンスが格納される。

# インスタンス化

 - クラスからインスタンスを作成することである。

# オブジェクト変数

- インスタンスが格納された変数の事である。
- `$変数名 = new クラス名(引数);`の`$変数名`に当たるものを指す。

# メソッド(メンバ関数)

- クラスの中に書かれた関数の事を指す。
- オブジェクト変数内のメンバ関数の戻り値を変数に格納したい場合は`$戻り値を格納したい変数名 = オブジェクト変数->メソッド名(引数);`とする。

# プロパティ(メンバ変数)

- クラスの中に書かれた変数の事を指す。
- `オブジェクト変数->プロパティ名;`で呼び出すことが可能である。

# クラスメソッド(静的メソッド)

- オブジェクトを生成せずにクラス(設計図)の状態で呼び出せる関数のことである。
- `::`(ダブルコロン演算子)で呼び出すことができる。
- `クラス名::メソッド名;`で呼び出すことが可能である。
- 戻り値を変数に格納したい場合は`$戻り値を格納したい変数名 = クラス名::メソッド名(引数);`とする。
- 呼び出し元がクラスである点に注意すること。

# クラスプロパティ(静的プロパティ)

- オブジェクトを生成せずにクラス(設計図)の状態で呼び出せる変数のことである。
- `::`(ダブルコロン演算子)で呼び出すことができる。
- `クラス名::プロパティ名;`で呼び出すことが可能である。
- 呼び出し元がクラスである点に注意すること。

# インスタンスメソッド

- インスタンス内にある関数の事を指す。
- `->`(アロー演算子)で呼び出すことができる。
- `オブジェクト変数->メソッド名(引数);`で呼び出すことが可能である。
- 戻り値を変数に格納したい場合は`$戻り値を格納したい変数名 = クラス名->メソッド名(引数);`とする。

# インスタンスプロパティ

- インスタンス内にある変数の事を指す。
- `->`(アロー演算子)で呼び出すことができる。

# バインド

- サービスコンテナにインスタンスの作成方法を登録すること。

# サービスコンテナ

- インスタンスの作成方法の管理をしてくれる機能を指す。

# ビジネスロジック

- システムの実際に処理をしている部分の事を指す。
- 変数に格納したり、値を処理したりする部分の事を指す。
- 意外と何を指すかは意外と曖昧である。
- システムの処理する部分のことである。
- システム固有の処理のことである。

# ルートプレフィックス

- グループ内の各ルートのURLの最初に指定した共通の文字列を付与する。
- 例えばいくつかのルーティングで指定するURLの最初に「admin」と付けたい場合は下記の様に記載する。

    ```web.php
    //グループ化で URLの最初にadminと付けたいルーティング情報を包む
    Route::prefix('admin')->group(function () {
        //URLの最初にadminとつけるルーティング情報を記載する
        Route::get('users', function () {
            // このルーティング情報にはURL"/admin/users"でアクセスできる
        });
        Route::get('home', function () {
            // このルーティング情報には URL"/admin/home"でアクセスできる 
        });
        // 下記のルーティング情報には URL"/admin/test"でアクセスできる
        Route::get('test', 'TestController@index');
    });
    ```

# 名前付きルート

- ルーティング情報に名前がついているものである。
- 下記の様なルーティング情報が記載されている物とする。

    ```web.php
    Route::get('user/index', 'UserController@index');
    Route::post('user/index', 'UserController@save');
    ```
- 先に記載したルーティング情報のget側に「index」、post側に「input」、ルートパラメータを含むものに「user_detaile」という名前をつける際は下記の様に記載する。(つける名前は一意にすること)

    ```web.php
    Route::get('user/index', 'UserController@index')->('index');
    Route::post('user/index', 'UserController@save')->('input');
    Route::get('user/detail/{user_id}', 'UserController@detail')->('user_detail')
    ```
- 先に記載したルート情報のget側にリダイレクトしたい場合はroute関数を用いてリダイレクトさせることが可能になる。例を下記に記載する。

    ```php
    //どこかのコントローラのアクション内などで下記を記載する。
    return redirect()->route('index');
    ```
- 先に記載したルート情報のpost側にデータを送りたい場合はroute関数を用いてデータを送ることが可能になる。例を下記に記載する。

    ```html
    //ビューファイルなどで下記を記載する。
    <form action="{{ route('input') }}" method="POST">
        <input type="submit">
    </form>
    ```
- 先に記載したルート情報のルートパラメータを含むものにリダイレクトしたい場合はroute関数に引数を用いることでリダイレクトさせることが可能になる。下記に例を記載する。

    ```php
    //どこかのコントローラのアクション内などで下記を記載する。"user/detail/1"にリダイレクトさせたい時
    return redirect()->route('user_detail', ['user_id' => 1]);
    ```

# ルートアズ(筆者が勝手に付けた、本当は違う名前かもしれない、すいません)

- 名前付きルートの「名前」の最初の部分にグループ化されたルート情報に共通した文字列を付与する。
- 下記に記載例を載せる。

  ```web.php
    //グループ化で 名前の最初にtestと付けたいルーティング情報を包む
    Route::as('test.')->group(function () {
        //名前の最初にtestとつけるルーティング情報を記載する
        Route::get('users', function () {
            // // 下記のルーティング情報にリダイレクトする際はreturn redirect()->route('test.users_1')とする
        })->name(users_1);
        Route::get('home', function () {
            // 下記のルーティング情報にリダイレクトする際はreturn redirect()->route('test.home_1')とする 
        })->name(home_1);
        // 下記のルーティング情報にリダイレクトする際はreturn redirect()->route('test.test_1')とする
        Route::get('test', 'TestController@index')->name(test_1);
    });
  ```

# クロージャ

- 無名関数のことである。
- 関数名を指定せず作成した関数のことである。
- 名も無き関数

# use宣言

- 

# ファサード

-