LoginSignup
49

More than 5 years have passed since last update.

Composerに自分の作ったクラスを追加してみる。

Last updated at Posted at 2015-02-15

Composer、全然使いこなせてませんでした、すみません。
自分のクラスを追加する場合、composer.jsonにautoloadという項目を追加して、そこに色々書いていきます。

composer.json
{
    "autoload": {
        "psr-4": {
            "MyNamespace\\": "Folder/"
        }
    }
}

psr-4というのは、名前空間の検索方式・・・といえばいいでしょうか。
要は、psr-4で決められた規則にそって、ディレクトリと名前空間を構成していく必要があります。
ここが理解できてなかった・・・。
他にもpsr-0、classmap、filesという方式があるようですが、これは古い設計になっているプロジェクトでも使えるように存在するだけで、今から新しく始める場合はpsr-4を使うと良い・・そうです(Composer公式サイト)。

composer.jsonを修正したら、それを反映させます。

composer dump-autoload
# もしくは php composer.phar dump-autoload

今回はpsr-4を使いました。
この場合、Folderという名前のフォルダの中にnamespaceがMyNamespaceとなっているクラスを作っていけば大丈夫です(psr-0とpsr-4の違いとかはComposerでPSR-4仕様のオートロードを設定するとかを参照してください)。

Folder/ClassA.php
<?php
namespace MyNamespace;

class ClassA
{
// ...
}

名前空間をMyNamespace\SubNamespaceと拡張していきたい場合は、Folderの中に、SubNamespaceというフォルダを作り、その中にnamespaceをMyNamespace\SubNamespaceとしたクラスを作っていきます。

Folder/SubNamespace/ClassB.php
<?php
namespace MyNamespace\SubNamespace;

class ClassB
{
// ...
}

MyNamespaceの部分をMyName\Spaceのように分割したいときは、composer.jsonを下記のように直します。

composer.json
{
    "autoload": {
        "psr-4": {
            "MyName\\Space\\": "Folder/"
        }
    }
}

修正したら反映。

composer dump-autoload

MyNamespaceという名前空間を使っていたファイルも、全て書き直します。

Folder/ClassA.php
<?php
namespace MyName\Space;

class ClassA
{
// ...
}
Folder/SubNamespace/ClassB.php
<?php
namespace MyName\Space\SubNamespace;

class ClassB
{
// ...
}

--以下、勉強中--

ちなみに、下記のような書き方もできるらしいんですけど、psr-4をどう設定していいかわからず、挫折しました。。。([PHP] composer と spl_autoload の設定

$loader = require_once './vendor/autoload.php';
$loader->add("MyNamespace\\": __DIR__ . "/Folder/");

あと、SplEnumのようなグローバルクラスの呼び出しも上手くいかなかったなぁ・・・。

<?php
namespace MyNamespace;

class MyEnum extends \SplEnum
{
// ...
}

まだまだ勉強不足です。。。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49