【问题标题】:Basic OOPS concept needs clarification基本的 OOPS 概念需要澄清
【发布时间】:2018-09-13 13:39:02
【问题描述】:

我是 OOPS 和 MVC 的新手,因此对某些我想澄清的概念感到困惑。正如下面在代码中提到的,我认为,提到的namespace App\Http\Controllers\Admin; 对应于目录结构,因此意味着AdminController 类包含在Admin 文件夹中,正如所指出的那样。但是我们有 use 关键字,以便使用以下命名空间。现在的问题是为什么我们使用use App\Http\Controllers\Controller;,特定的行。它有什么用途?

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

class AdminController extends Controller
{
    public function index()
    {
        echo "admin controller";
    }

}

【问题讨论】:

    标签: laravel oop namespaces


    【解决方案1】:

    命名空间基本上将您的函数、类和常量分组在一个特定的“名称”下,我们称之为命名空间。

    现在 use 关键字允许开发人员缩短命名空间。use 在我们打算在同一个代码文件中一遍又一遍地调用同一个函数,或者在一个特定的命名空间下调用不同的函数、常量或类。

    【讨论】:

    • 想问?如果我使用class AdminController extends App\Http\Controllers\Controller 并删除顶部的use 语句会怎样?您认为该应用程序可以正常工作吗?
    • 可能不会,编译器会抱怨。检查rextester.com/XCA94539
    • 我同意你的看法,我遇到了一个例外,但为什么会发生这种情况?除了使用 use 关键字之外,我给出了完整的命名空间,那么为什么编译器不接受呢?
    • 因为它正在检查当前命名空间内的控制器
    • 你有 App\Http\Controllers\Admin 命名空间。在此命名空间内,您正在定义名为“AdminController”的类。这个类应该是Controller类的子类,它在“App\Http\Controllers\”里面。所以你需要提供绝对或相对命名空间。
    【解决方案2】:

    使用通常允许开发者缩短命名空间。

    复制来自相同或不同命名空间的另一个类,因此您可以在代码中使用该类及其类名。如果要使用另一个类而不使用,则需要编写完整的命名空间。

    这可能有助于您更好地理解它。 https://daylerees.com/php-namespaces-explained/

    【讨论】:

    • 我认为命名空间是在 PHP 5.4 中引入的,但很高兴知道它是在 v5.3 中引入的。感谢您的链接。
    【解决方案3】:

    namespace App\Http\Controllers\Admin; 如您所说,用于让 laravel 知道从哪里访问您的 AdminController

    而您的 AdminController 扩展了基础 Controller 使用基础 Controller 的默认类,因此我们需要使用 use 规范。 use App\Http\Controllers\Controller; 用于声明您将在AdminController 中使用基类Controller

    更多信息请阅读官方 laravel docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 2020-02-05
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多