【问题标题】:Composer Gives Error, "Class Not Found"作曲家给出错误,“找不到类”
【发布时间】:2016-01-22 05:03:16
【问题描述】:

我使用的是 Windows 10。在根目录中创建了一个文件夹 src 后,我在其中创建了两个文件。

目录结构(运行composer install之前):

│
├── 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/"
        }
    }
}

运行.php:

<?php

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

use myns\childclass as childclass;

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

src文件夹中的两个文件:

childclass.php:

<?php

require_once 'parentclass.php';

use myns\parentclass as parentclass;

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

父类.php:

<?php

namespace myns;

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

运行后的目录结构composer install

│
├── 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

我收到此错误:

致命错误:第 7 行的 C:\wamp...\run.php 中找不到类 'myns\childclass'

【问题讨论】:

  • 可能是因为您的子班缺少namespace myns;
  • @BrianGlaz 还说:您根本不需要在您的子类中使用 require_once - 这就是自动加载器的用途。
  • @BrianGlaz 是的,没错。它解决了我的问题。感谢您的快速回复:-)
  • @ccKep 太好了。我真的不知道。

标签: php namespaces composer-php autoloader psr-4


【解决方案1】:

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';
    }
}

另外在run.php 文件中你可以替换:

use myns\childclass as childclass;

进入

use myns\childclass;

如果您不想为类使用其他名称,则无需使用as

您还应该考虑使用带有大写字母(Studly caps)的命名空间,并且对于类也是如此。代替myns 使用MyNs,代替parentclass 使用ParentClass。您应该查看 PSR-1 coding standardPSR-2 coding standard 以遵循最佳编码实践。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2018-04-05
  • 2016-01-17
  • 2018-09-03
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多