Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
49
Help us understand the problem. What is going on with this article?
@ukisoft

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

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

49
Help us understand the problem. What is going on with this article?
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
ukisoft
まったり developer です。python と js を使うことが多いです。
rymansat
「2機目の人工衛星が2021年に宇宙へ飛び立ちます!」 ●普段は宇宙開発に関わっていないサラリーマンが身近で誰でもできる宇宙開発を実現させることがリーマンサット・プロジェクト(rsp.)の目的です。●キューブサットの開発をはじめ、宇宙を軸として様々なコミュニティやクリエイターとコラボレーションし、民間宇宙開発に関するネットワークを強化、拡張することを目指して活動しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
49
Help us understand the problem. What is going on with this article?