PHP
Composer

[PHP] PHPでオートローダー(Composer)

■ 概要

PHPでComposerを使用した事例があまりないので導入メモ。

■環境

Windows 7
CentOS 7.4
ProtocolBuffers 3.5.
PHP 7.2.2

■composer設定

CentOSでの作業。

作業ディレクトリ作成

[~]$ mkdir composer_test;
[~]$ cd composer_test;

composerダウンロード

[composer_test]$ curl -s https://getcomposer.org/installer | php

lsでcomposer.pharがあることを確認。

composer.json作成

[composer_test]$ vi composer.json
{
    "autoload": {
        "psr-4": {
            "myapp\\": "src/"
        }
    }
}

autoload.php生成

[composer_test]$ php composer.phar dump-autoload

composer_testフォルダ直下にvenderフォルダが生成される。
composer_testを使用するソースでvender/autoload.phpをrequireして使用する。

■テストコード

オートロードするファイル(sword.php)作成

[composer_test]$ mkdir -p src/item/weapon;
[composer_test]$ vi src/item/weapon/Sword.php
<?php
namespace myapp\item\weapon;
class Sword {
    public function PrintName() { 
       print_r("Excalibur\n");
    }
}

実行コード(sample.php)作成

[composer_test]$ vi sample.php
<?php
$autoloader = require_once "vendor/autoload.php";

$sword = new myapp\item\weapon\Sword();
echo $sword->PrintName();

実行

[composer_test]$ php sample.php 

実行結果

Excalibur

■テストコード置き場と実行方法

作業ディレクトリ作成

[~]$ mkdir sample;
[~]$ cd sample;

githubからリポジトリ取得

[sample]$ git clone https://github.com/kflower725/sample_program.git

composer_testフォルダに移動

[sample]$ cd sample_program/composer_test/

実行

[composer_test]$ php sample.php 

実行結果

Excalibur

■メモ

オートローダーのフォルダマッピング一覧の表示

以下のコードでオートローダーがどのフォルダを実際に認識しているかを確認できる。

コード

<?php
$autoloader = require_once "vendor/autoload.php";
echo json_encode($autoloader->getPrefixesPsr4(), JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES) . PHP_EOL;

実行結果

{
    "myapp\\": [
        "/home/hanai/composer_test/vendor/composer/../../src"
    ]
}

オートローダーでクラスを読み込めているかの確認

オートローダーでクラスを読み込めているかの確認

コード

$autoloader = require_once "vendor/autoload.php";
$result = $autoloader->findFile('myapp\item\weapon\Sword');
echo json_encode($result) . "\n";

実行結果

"\/home\/xxx\/composer_test\/vendor\/composer\/..\/..\/src\/item\/weapon\/Sword.php"

■参考

[PHP]ComposerでAutoload出来ない時の確認方法