【问题标题】:How can I correctly use/import an interface in a php class?如何在 php 类中正确使用/导入接口?
【发布时间】:2020-10-08 13:59:06
【问题描述】:

我无法让接口在我的 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);
}

在这里,我在定义类的行上遇到错误,说interface 'iTeamEntryController' is not found。类和接口都存在于同一个文件夹中。

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

【问题讨论】:

    标签: php interface


    【解决方案1】:

    请记住,use 子句希望您指定一个绝对类/接口/特征名称,不是相对于您当前的命名空间。

    以下是错误的,除非您的控制器位于全局命名空间中(我敢肯定不是这种情况):

    use iTeamEntryController; // wrong
    

    而这 - 下面 - 是正确的:

    use App\Http\Controllers\iTeamEntryController;
    

    如果你将你的界面保存在app/Http/Controllers 目录中,别忘了指定一个命名空间:

    namespace App\Http\Controllers;
    

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

    【讨论】:

    • 谢谢。这样可行。我指望 phpStorm 只知道它应该是怎样的,但需要完整的路径!再次感谢:)
    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 2017-05-22
    • 2011-09-04
    • 2021-12-11
    • 2021-03-13
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多