【发布时间】:2016-01-22 06:17:08
【问题描述】:
这个问题是独立的,但我之前确实问过类似的问题:-
Composer Gives Error, "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
【问题讨论】:
-
我有 70% 的把握在
childclass.php中应该只有 1 个命名空间。 -
删除子类中
namespace myns\one;的命名空间,然后查看@Frederic 的答案。然后使用composer dump-autoload -
@HPierce 您可以将其发布为答案。
标签: php composer-php