从同一命名空间导入类/接口时出现致命错误

时间:2016-02-27 05:48:06

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

我有一个Duck接口(本例中是抽象类),而Class MallardDuck正在实现它。我正在尝试从Duck名称空间自动加载文件,但会收到致命错误。

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

我习惯在Laravel工作,为我加载文件,但我想自己使用composer。我知道这不是一个很大的问题,但是当你不知道什么的时候,它被认为是一个非常大的问题。无论如何,这里是我的类的代码和composer.json

Duck类代码:

<?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\\": ""指向我应用的根目录。这是我的app目录结构:

vendor
    autoload.php
app
    Duck.php
    MallardDuck.php

1 个答案:

答案 0 :(得分:0)

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