php - 找不到 Composer 自动加载类

标签 php namespaces composer-php autoload

我的文件夹结构如下:

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 类的文件是 admin/controllers/contact/ 文件夹中的 edit.php。我的 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 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

关于php - 找不到 Composer 自动加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40126706/

相关文章:

Laravel - Composer 更新和托管 azure 问题

c# - 在 xaml 中引用无命名空间类

php - Composer 的自动加载器找不到应用类。为什么?

php - 替换除换行符之外的所有不可打印字符

php - 上传文件到根文件夹之外?

php - 恢复迁移到 Magento 2 的产品描述中的换行符

php - 如何使用 RegEx 匹配方括号文字?

php - 命名空间函数 (PHP)

c++ - 为什么要重新定义函数命名空间?

php - Laravel 5 composer 安装失败(psysh、php-parser、ext-tokenizer 错误)