簡體   English   中英

PHP Composer PSR-4自動加載和子命名空間,未找到類

[英]PHP Composer PSR-4 Autoloading And Sub-Namespaces, Class Not Found

這個問題是獨立的,但我之前曾問過類似的問題:

作曲家給出錯誤,“找不到類”

問題已解決,但我無法解釋嵌套問題。 我認為提出一個新問題會更合適。

我進行了很多搜索,但無法將嵌套名稱空間用於psr-4自動加載。

目錄結構:

│   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:-

<?php

namespace myns\one;

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

childclass.php:-

namespace myns\two;

namespace myns\one;

use myns\one\parentclass as parentclass;

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

composer.json:-

{
    "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:-

<?php

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

use myns\two\childclass as childclass;

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

當我運行php run.php 它給出錯誤:-

Fatal error: Class 'myns\two\childclass' not found in C:\wamp\...\run.php on line 7

一個類只能在文件中聲明一個名稱空間。 通過在childclass.php包含兩個名稱空間,您可能會覆蓋第一個名稱空間。

在這里可以看到使用多個名稱空間的完整示例,但是該文件僅包含1個namespace聲明。 就是說,對於您的情況,我懷疑您只是犯了一個錯誤而只需要一個名稱空間。

因為該文件位於myns\\two; 您應該使用namespace myns\\two; 並刪除另一個。

您只應添加

"autoload": {
    "psr-4": {
        "myns\\": "src/"
    }
}

您添加的其他兩個名稱可能與名稱空間沖突,因為您要覆蓋它並告訴指向相同的根目錄/ src

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM