私は次のようなフォルダ構造を持っています:
includes/
libraries/
Classes/
Contact/
Contact.php
ContactController.php
admin/
controllers/
contact/
edit.php
Contact.phpは、使用しようとしているファイルです。ファイルに含まれています。
<?php
namespace Classes;
class Contact {
function __construct() {
die('here');
}
}
次のようなcomposer.jsonファイルがあります。
{
"autoload": {
"psr-4": {
"Classes\\": "includes/libraries/Classes/"
}
},
}
Contactクラスを使用しようとしているファイルはedit.php
以内 admin/controllers/contact/
フォルダー。俺の edit.php
ファイルは次のようなものです。
<?php
use Classes\Contact;
$contact = new Contact();
var_dump($contact);
このファイルにはvendor/autoload.php
ファイルが含まれていますが、クラスを使用するように取得できないようです。
Classes/Contact/Contact.php
およびcomposerルール"Classes\\": "includes/libraries/Classes/"
は、Classes\Contact\Contact
ではなくClasses\Contact
クラスを意味します。
したがって、実際にClasses\Contact
クラスが必要な場合は、Classes/Contact/Contact.php
ファイルを親ディレクトリClasses/Contact.php
に移動します。
ただし、クラスへの目的のネームスペースパスがClasses\Contact\Contact
である場合、use
を変更します。
use Classes\Contact\Contact;
namespace
:
namespace Classes\Contact;
class Contact {}
├── composer.json
├── includes
│ └── libraries
│ └── Classes
│ └── Contact
│ └── Contact.php
├── test.php
└── vendor
├── autoload.php
└── composer
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
├── autoload_static.php
├── ClassLoader.php
├── installed.json
└── LICENSE
vendor/
の下のファイルは作曲家によって生成されます。
composer.json
{
"name": "testpsr4",
"autoload": {
"psr-4": {
"Classes\\": "includes/libraries/Classes"
}
}
}
test.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Classes\Contact\Contact;
$c = new Contact;
$c->test();
includes/libraries/Classes/Contact/Contact.php
<?php
namespace Classes\Contact;
class Contact {
public function test () {
echo __METHOD__, PHP_EOL;
}
}
テスト
composer update
php test.php
出力
Classes\Contact\Contact::test