Laravel 中声明的命名空间在哪里?

Where are namespaces declared in Laravel?

我在 php 中了解到,要使用命名空间,您必须先声明或包含。

<?php
    namespace namespace_01;

    function f1()
    {
        echo 'this is function';
    }

    use namespace_01 as test_namespace;
    test_namespace\f1();
?>

几乎所有 laravel 代码都使用名称空间。但是它们在哪里定义的?

示例,

当我创建控制器时。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class controller1 extends Controller
{
    //
} 

Illuminate\Http\Request定义在哪里?

这些是在Laravel Framework. Laravel uses composer中找到的,可以自动加载这些包。您可以在 /vendor 文件夹中找到源代码,这是作曲家放置包的地方。

vendor/laravel/framework/src/Illuminate/Http/Request.php

打开文件

在那里你会看到命名空间在顶部声明为 namespace Illuminate\Http; 并且 class 名称是 Request

您可以在 composer.json 文件中看到

"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\": "app/"
        }
    },

因此 App 文件夹中的所有 classes 都会自动加载作曲家和供应商文件。您不需要每次都包含文件。