这个问题是独立的,但我也曾问过一个类似的问题:
问题解决了,但我没有解释嵌套问题。我认为提出一个新的问题会更合适。
我搜索了很多,但是我不能让嵌套的名称空间与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
LICENSEparentclass.php:-
<?php
namespace myns\one;
abstract class parentclass
{
abstract public function abc();
}:-
namespace myns\two;
namespace myns\one;
use myns\one\parentclass as parentclass;
class childclass extends parentclass
{
public function abc()
{
echo 'hello world';
}
}:-
{
"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发布于 2015-10-22 21:00:51
类只能声明文件中的一个命名空间。通过在childclass.php中包含两个名称空间,很可能会覆盖第一个名称空间。
一个完整的示例可以看到使用多个名称空间的这里,但该文件只包含一个namespace声明。尽管如此,对于您的情况,我怀疑您只是犯了一个错误,只需要一个名称空间。
因为文件位于myns\two;中,所以您应该使用namespace myns\two;并删除另一个文件。
发布于 2015-10-22 20:26:59
您只应该添加
"autoload": {
"psr-4": {
"myns\\": "src/"
}
}您添加的另外两个名称空间可能与名称空间冲突,因为您正在重写名称空间并告诉它指向相同的根/src。
https://stackoverflow.com/questions/33290004
复制相似问题