未找到 Composer 自动加载 类
Composer Autoloading classes not found
我的文件夹结构如下:
includes/
libraries/
Classes/
Contact/
Contact.php
ContactController.php
admin/
controllers/
contact/
edit.php
Contact.php 是我的 class 我正在尝试使用的文件。该文件包含。
<?php
namespace Classes;
class Contact {
function __construct() {
die('here');
}
}
我的 composer.json 文件如下:
{
"autoload": {
"psr-4": {
"Classes\": "includes/libraries/Classes/"
}
},
}
我尝试在其中使用联系人 class 的文件位于 admin/controllers/contact/
文件夹中的 edit.php
。我的 edit.php
文件是这样的:
<?php
use Classes\Contact;
$contact = new Contact();
var_dump($contact);
此文件包含 vendor/autoload.php
文件,但我似乎无法使用 class?
Classes/Contact/Contact.php
和作曲家规则 "Classes\": "includes/libraries/Classes/"
暗示 Classes\Contact\Contact
class,而不是 Classes\Contact
.
因此,如果您确实需要 Classes\Contact
class,请将 Classes/Contact/Contact.php
文件移至父目录:Classes/Contact.php
.
但是,如果 class 所需的名称空间路径是 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生成。
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
我的文件夹结构如下:
includes/
libraries/
Classes/
Contact/
Contact.php
ContactController.php
admin/
controllers/
contact/
edit.php
Contact.php 是我的 class 我正在尝试使用的文件。该文件包含。
<?php
namespace Classes;
class Contact {
function __construct() {
die('here');
}
}
我的 composer.json 文件如下:
{
"autoload": {
"psr-4": {
"Classes\": "includes/libraries/Classes/"
}
},
}
我尝试在其中使用联系人 class 的文件位于 admin/controllers/contact/
文件夹中的 edit.php
。我的 edit.php
文件是这样的:
<?php
use Classes\Contact;
$contact = new Contact();
var_dump($contact);
此文件包含 vendor/autoload.php
文件,但我似乎无法使用 class?
Classes/Contact/Contact.php
和作曲家规则 "Classes\": "includes/libraries/Classes/"
暗示 Classes\Contact\Contact
class,而不是 Classes\Contact
.
因此,如果您确实需要 Classes\Contact
class,请将 Classes/Contact/Contact.php
文件移至父目录:Classes/Contact.php
.
但是,如果 class 所需的名称空间路径是 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生成。
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