PHPのcomposer,オートロード(autoload),名前空間(namespace)について

# composerとは
***PHPのライブラリを管理するツール***です。
 これを使うことによって別のファイルを読み込む時に***オートロード(自動クラス読み込み)***
してくれる便利なツールです。



詳しい説明は下の記事にあります。
https://qiita.com/atwata/items/d6f1cf95ce96ebe58010

# composerの導入
composerは公式サイトからダウンロードができます。
Macの場合は

```
$ brew install composer
```
でインストールできます。とは言っても公式サイトは見る習慣は大事だと思います。

下の写真は2022/4/22現在

![スクリーンショット 2022-04-12 11.22.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/e3eac3e8-84bc-f356-0365-26b8d386ff48.png)


上記のコマンドを実行した後に、lsコマンドでターミナルで確認すると、
```composer.phar```があると思います。

composerのバージョンを確認します。

```
$ composer --version
```
でバージョンを確認できます。これでcomposerが導入されました。


確認できたらこのコマンドを使います。
```
$ sudo mv composer.phar /usr/local/bin/composer
```
パスワードが聞かれますが、これはPCのパスワードです。


MAMPはすでに導入されていること前提で話します。

```
$ cd /Applications/MAMP/htdocs
```
でhtdocsに入った後、ディレクトリを作成し移動します。
```
$ mkdir composer_test
$ cd composer_test 
```
次にcomposer.jsonファイルを作成します。
```
composer_test$ composer init
```
でエンターとyesをおし続けます。
わからなければcomposer initを下のサイトから調べてください。
https://www.webdesignleaves.com/pr/php/php_composer.php

するとcomposer.jsonのファイルができます。

```composer_test/composer.json
{
    "name": "省略/composer_test",
    "autoload": {
        "psr-4": {
            "省略\\ComposerTest\\": "src/"
        }
    },
    "authors": [
        {
            "name": "省略",
            "email": "省略"
        }
    ],
    "require": {}
}
```
省略には自分の名前やメールアドレスが入ります。

この後オートロードするために書き換えます。

```composer_test/composer.json
{
    "autoload":{
        "psr-4": {
            "App\\" : "app/"
        }
    }
    
}
```

```
composer_test $ composer install
```
composerがインストールされVScodeを見てみると変化していると思います。
autoloadのファイルなどがあると思います。


composerの内容を更新する時は
```
$ composer update
```

```
$ composer dump-autoload
```
で更新がかかったりします。


⚫︎公式サイト

https://getcomposer.org/download/

# 名前空間(namespace)
```名前空間(namespace)```とは***ここからここまでが名前の空間に属している***と定めます。
なぜこれが必要かというと、***同じ関数名をPHPでは使うことができないから***です。
他にもクラスやインターフェースも利用できないみたいです。

空間が違えば、同じ関数名を定義して使うことができるので名前空間を使います。

### namespaceの使い方

```php
<?php
namespace 名前空間名;
```
で定義することができます。

### useの使い方
useとは名前空間の拡張機能で***クラスや関数などをインポート***する時に使います。

```php
use [名前空間または一部・クラス・関数など] as 別名称
```

## 名前空間を使う

実際に名前空間を使って出力させました。

```Training_Model.php
<?php
namespace App\Models;

class Training_Model 
{
  private $text = "PHPの学習"; //変数

  public function getStudy(){
      return $this->text;
  }
}

```

```Training_Controller.php
<?php

namespace App\Controllers;//Appのコントローラーの名前空間

use App\Models\Training_Model; //useを使う Training_Modelインポートする

class Training_Controller
{
   public function run(){
       $model = new Training_Model;//インスタンス化
       echo $model->getStudy();
   }
}
```

```index.php
<?php

require_once __DIR__ . "/vendor/autoload.php";
    //読み込み //__DIR__そのファイルの存在するディレクトリのこと
    //venderフォルダの中のautoload.php

use App\Controllers\Training_Controller;  
//TestController読み込み

$app = new Training_Controller;
$app->run();

//PHPの学習 と出力
```

# composerのライブラリ
composerを使う上でライブラリを使います。

https://blog.codecamp.jp/php_library

その中で```Carbon```という***日付を操作するライブラリ***があります。

```
$ composer require nesbot/carbon
```
でインストールできます。

```vender/composer.json

{
    "autoload":{PHPの学習2022-04-12 09:22:01
        "psr-4": {
            "App\\" : "app/"
        }
    },
    "require": {   //追加
        "nesbot/carbon": "^2.57"
    }
}
```
***requireの部分が追加***されます。

日付指定です。これはイギリスの時間です。
```index.php
use Carbon\Carbon;

echo Carbon::now();
//2022-04-12 09:22:01
```

日本の東京にするなら

```index.php
use Carbon\Carbon;

echo Carbon::now("Asia/Tokyo");   
//2022-04-12 18:25:20
```
になります。

```index.php
use Carbon\Carbon;
echo Carbon::create(2022, 4, 22, 10, 20, 30);
//日付作成
```

https://qiita.com/shosho/items/ea049f2a28586364e35c





# 資料
https://qiita.com/sano1202/items/50e5a05227d739302761

https://www.webdesignleaves.com/pr/php/php_composer.php

https://fujimix.com/appleple/install-mamp-and-get-started-with-ablogcms.html

https://qiita.com/7968/items/1e5c61128fa495358c1f

https://www.sejuku.net/blog/23555#use