Composer、全然使いこなせてませんでした、すみません。
自分のクラスを追加する場合、composer.jsonにautoloadという項目を追加して、そこに色々書いていきます。
{
"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仕様のオートロードを設定するとかを参照してください)。
<?php
namespace MyNamespace;
class ClassA
{
// ...
}
名前空間をMyNamespace\SubNamespaceと拡張していきたい場合は、Folderの中に、SubNamespaceというフォルダを作り、その中にnamespaceをMyNamespace\SubNamespaceとしたクラスを作っていきます。
<?php
namespace MyNamespace\SubNamespace;
class ClassB
{
// ...
}
MyNamespaceの部分をMyName\Spaceのように分割したいときは、composer.jsonを下記のように直します。
{
"autoload": {
"psr-4": {
"MyName\\Space\\": "Folder/"
}
}
}
修正したら反映。
composer dump-autoload
MyNamespaceという名前空間を使っていたファイルも、全て書き直します。
<?php
namespace MyName\Space;
class ClassA
{
// ...
}
<?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
{
// ...
}
まだまだ勉強不足です。。。