【问题标题】:Fatal Error while Importing Class/Interface from the Same Namespace从同一命名空间导入类/接口时出现致命错误
【发布时间】:2016-06-10 12:36:51
【问题描述】:

我有一个 Duck 接口(在这种情况下是抽象类),而 MallardDuck 类正在实现它。我正在尝试从 Duck 命名空间自动加载文件,但出现致命错误。

PHP Fatal error:  Interface 'Duck\Duck' not found in /var/www/HeadFirstDesignPattern/MallardDuck.php on line 11

我习惯于使用 Laravel 为我加载文件,但我想自己使用 composer 来完成。我知道这不是一个很大的问题,但是当你不知道某事时,它就会被认为是一个非常大的问题。无论如何,这里是我的课程的代码和composer.json

鸭类代码:

<?php namespace Duck;

//Duck.php

/**
* Description of Duck
*
* @author me
*/
abstract class Duck {

    public abstract function display();

    public function quack() {
        echo 'quack';
    }

    public function swim() {
        echo 'swim';
    }

}

野鸭代码

//MallardDuck.php

use Duck\Duck;
/**
 * Description of MallardDuck
 *
 * @author mkhuram
 */
class MallardDuck implements \Duck{
    public function display() {
        echo __NAMESPACE__;
        echo "\n".__CLASS__;
    }
}

$md = new MallardDuck();

$md->display();

Compser.json 文件

{
    "name": "vendor/head-first-design-pattern",
    "description": "Description of project HeadFirstDesignPattern.",
    "authors": [
        {
            "name": "me",
            "email": "my@email.com"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4":{
            "Duck\\": ""
        }
    }
}

"Duck\\": "" 指向我的应用程序的根目录。这是我的应用程序目录结构:

vendor
    autoload.php
app
    Duck.php
    MallardDuck.php

【问题讨论】:

  • 旁注:Duck 是一个类,而不是一个接口,所以你应该扩展它。

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


【解决方案1】:

你不能implement一个抽象类,你只能extend它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多