Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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
{
// ...
}

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした