我正在使用Windows 10.在根目录中创建文件夹src后,我在其中创建了两个文件.
目录结构(在运行composer安装之前):
│
├── composer.json
├── run.PHP
│
└── src
├── childclass.PHP
└── parentclass.PHP
根目录中的两个文件:
composer.json:
{
"name": "myvendor/mypackage",
"description": "nothing",
"authors": [
{
"name": "Omar Tariq",
"email": "XXXXX@gmail.com"
}
],
"require": {},
"autoload": {
"psr-4": {
"myns\\": "src/"
}
}
}
run.PHP:
<?PHP
require_once __DIR__ . '/vendor/autoload.PHP';
use myns\childclass as childclass;
$childclass = new childclass();
$childclass->abc();
childclass.PHP:
<?PHP
require_once 'parentclass.PHP';
use myns\parentclass as parentclass;
class childclass extends parentclass
{
public function abc()
{
echo 'hello world';
}
}
parentclass.PHP:
<?PHP
namespace myns;
abstract class parentclass
{
abstract public function abc();
}
运行composer安装后的目录结构:
│
├── composer.json
├── run.PHP
│
├── src
│ ├── childclass.PHP
│ └── parentclass.PHP
│
└── vendor
├── autoload.PHP
│
└── composer
├── autoload_classmap.PHP
├── autoload_namespaces.PHP
├── autoload_psr4.PHP
├── autoload_real.PHP
├── ClassLoader.PHP
├── installed.json
└── LICENSE
现在,当我跑:
PHP run.PHP
我收到此错误:
Fatal error: Class ‘myns\childclass’ not found in C:\wamp…\run.PHP on line 7
解决方法:
在composer.json中你为src文件夹定义了你使用myns命名空间,所以在你的childclass.PHP你应该使用
namespace myns;
它也没有必要添加:
require_once 'parentclass.PHP';
要么
use myns\parentclass as parentclass;
所以你的childclass.PHP看起来像这样:
<?PHP
namespace myns;
class childclass extends parentclass
{
public function abc()
{
echo 'hello world';
}
}
use myns\childclass as childclass;
成
use myns\childclass;
您不需要使用,就好像您不想在课程中使用其他名称一样.
您还应该考虑使用带有大写字母(Studly caps)的名称空间和类相同的名称空间.而不是myns使用MyNs而不是父类使用ParentClass.您应该查看PSR-1 coding standard和PSR-2 coding standard以遵循最佳编码实践.