[英]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.