【发布时间】: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