首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP PSR-4自动命名空间和子命名空间,未找到类

PHP PSR-4自动命名空间和子命名空间,未找到类
EN

Stack Overflow用户
提问于 2015-10-22 20:21:42
回答 2查看 5.5K关注 0票数 2

这个问题是独立的,但我也曾问过一个类似的问题:

Composer给出错误,“未找到类”

问题解决了,但我没有解释嵌套问题。我认为提出一个新的问题会更合适。

我搜索了很多,但是我不能让嵌套的名称空间与psr-4自动加载一起工作。

目录结构:-

代码语言:javascript
复制
│   composer.json
│   run.php
│
├───src
│   ├───one
│   │       parentclass.php
│   │
│   └───two
│           childclass.php
│
└───vendor
    │   autoload.php
    │
    └───composer
            autoload_classmap.php
            autoload_namespaces.php
            autoload_psr4.php
            autoload_real.php
            ClassLoader.php
            installed.json
            LICENSE

parentclass.php:-

代码语言:javascript
复制
<?php

namespace myns\one;

abstract class parentclass
{
    abstract public function abc();
}

:-

代码语言:javascript
复制
namespace myns\two;

namespace myns\one;

use myns\one\parentclass as parentclass;

class childclass extends parentclass
{
    public function abc()
    {
        echo 'hello world';
    }
}

:-

代码语言:javascript
复制
{
    "name": "myvendor/mypackage",
    "description": "nothing",
    "authors": [
        {
            "name": "Omar Tariq",
            "email": "XXXXX@gmail.com"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "myns\\": "src/",
            "myns\\one\\": "src/one/",
            "myns\\two\\": "src/two/"
        }
    }
}

run.php:-

代码语言:javascript
复制
<?php

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

use myns\two\childclass as childclass;

$childclass = new childclass();
$childclass->abc();

当我运行php run.php时。它会产生错误:-

代码语言:javascript
复制
Fatal error: Class 'myns\two\childclass' not found in C:\wamp\...\run.php on line 7
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-22 21:00:51

类只能声明文件中的一个命名空间。通过在childclass.php中包含两个名称空间,很可能会覆盖第一个名称空间。

一个完整的示例可以看到使用多个名称空间的这里,但该文件只包含一个namespace声明。尽管如此,对于您的情况,我怀疑您只是犯了一个错误,只需要一个名称空间。

因为文件位于myns\two;中,所以您应该使用namespace myns\two;并删除另一个文件。

票数 2
EN

Stack Overflow用户

发布于 2015-10-22 20:26:59

您只应该添加

代码语言:javascript
复制
"autoload": {
    "psr-4": {
        "myns\\": "src/"
    }
}

您添加的另外两个名称空间可能与名称空间冲突,因为您正在重写名称空间并告诉它指向相同的根/src

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33290004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档