gpt4 book ai didi

php - 自定义 Composer 命名空间找不到类

转载 作者:可可西里 更新时间:2023-10-31 22:06:40 27 4
gpt4 key购买 nike

我正在尝试为我的个人类(class)使用我的自定义命名空间。

目录结构是(和往常一样):

    my_project/      - src/         |- myComponent.class.php         \- myWrapper.class.php      - vendor         |- OtherLibrary         \- Symfony      - composer.json      - index.php

in my composer.json I specify my own namespace with:

"autoload": {
"psr-0": {
"my_namespace\\": "src/"
}
}`

然后在我的 PHP 代码中我有类似的东西:

我的组件.class.php

namespace my_namespace;

class myComponent
{
.... code
}

索引.php

namespace my_namespace;

require_once __DIR__.'/vendor/autoload.php';

$component = new myComponent();

运行这个我得到一个:

Fatal error: Class 'my_namespace\myComponent' not found in /path_to_root/my_project/index.php on line 5

同时...

  • 我希望 myComponentmy_project/src/ 下搜索,如 composer.json 中指定和定义进入 vendor/composer/autoload_namespaces.php('my_namespace\\' => array($baseDir . '/src'))。

  • 当我将命名空间定义为我自己的命名空间时,我希望直接调用我的自定义 myComponent。我错了吗?

我的代码和我的假设有什么问题?我该如何解决?

最佳答案

错误是您自己发现的,但这里是 Composer 中有用的自动加载指令的快速集合:

  1. PSR-0 将类名转换为路径名( namespace 中的下划线和反斜杠转换为目录分隔符),在末尾添加“.php”,并尝试在您提供的路径中找到该文件在 composer.json 文件中。类 myNamespace\myClass"psr-0":{"myNamespace\\": "src"} 将尝试加载 src/myNamespace/myClass。 php.
  2. PSR-4 只适用于命名空间。它将类全名中composer.json中给定的命名空间前缀去掉,其余部分转为路径,在末尾加上“.php”,在给定的路径中查找。类 myNamespace\myClass"psr-4":{"myNamespace\\": "src"} 将尝试加载 src/myClass.php
  3. 类映射自动加载将通过扫描所有文件的类、接口(interface)和特征(所有可以自动加载的东西)来工作,并编译它的数组映射。它适用于任何文件名模式和任何目录布局,但尽量避免使用它,因为每次添加新类时都需要更新 map 。此外,安装时扫描文件需要时间,加载和保存该 map 需要一些 CPU 和内存。

关于php - 自定义 Composer 命名空间找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com