我怎样才能在php class 中正确地use/import 接口?

How can I correctly use/import an interface in a php class?

我无法让接口在我的 php/laravel 项目中工作。我有一系列控制器,我想实现一个接口。 PhpStorm 似乎对我的语法很满意。但是当我检查当前对象是否确实有接口时,我得到一个运行时错误,提示找不到接口:

<?php

namespace App\Http\Controllers;


use Illuminate\Http\Request;
use iTeamEntryController;

class TeamController extends Controller implements iTeamEntryController {...}

然后是界面:

<?php
use Illuminate\Http\Request;
interface iTeamEntryController
{
    public function saveTeam(Request $request);
}

这里我在定义 class 的行上得到一个错误,说 interface 'iTeamEntryController' is not found。 class 和界面都在同一个文件夹中。

我一直在网上找例子,但是大家要么在同一个文件中同时拥有接口和class声明,要么使用'include_once'或'require_once',这对我来说似乎是指文件,而不是 OOP。那我在这里做错了什么?为什么找不到我的界面?

请记住,use 子句希望您指定一个 绝对 class/interface/trait 名称,不是 相对于您当前的命名空间。

以下是错误的,除非你的控制器在全局命名空间中(我敢肯定不是这样):

use iTeamEntryController; // wrong

下面这个是正确的:

use App\Http\Controllers\iTeamEntryController;

如果您将界面保存在 app/Http/Controllers 目录中,请不要忘记指定命名空间:

namespace App\Http\Controllers;

另一方面,如果您希望您的界面位于根目录中,请确保它在那里。然后,不需要名称空间并且您的 use 子句是正确的。除了,我很确定你不希望你的界面在你的 Laravel 应用程序的根目录中。