PHP 命名空间和 use 即使我已经使用 use 指定了类,也未找到致命错误类

tie*_*inh 3 php namespaces fatal-error classnotfound

我在 PHP 中的名称空间方面遇到了麻烦。例如我有一个这样的文件

namespace App\Models\Abstracts;
abstract class Country{}
Run Code Online (Sandbox Code Playgroud)

然后是另一个像这样的文件

namespace App\Models;

use App\Models\Abstracts\Country;

class City extends Country{}
Run Code Online (Sandbox Code Playgroud)

我总是得到

致命错误:未捕获错误:类...未在...中找到

谁能帮我?多谢。

Moh*_*BLI 5

为此,我建议您使用 PSR (psr-4)。

首先,让我们创建一个文件结构如下:

在此输入图像描述

现在让我们初始化 Composer 来配置 psr-4。

跳转到项目的根目录(在本例中为 src 的根目录),然后运行:

会要求你填写一些项目信息,跳过即可

作曲家初始化

根目录下会创建一个名为composer.json的文件,让我们在里面配置psr-4。

{
    "name": "root/project",
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

了解有关psr-4的更多信息

要悬停,我们只是告诉 PSR 将名称 App 指向目录 src,然后子文件夹的名称应该是您的命名空间中的姓氏。

例子:

App => src directory 
App\Models => src/Models directory
Run Code Online (Sandbox Code Playgroud)

等等

接下来,您应该通过以下方式生成自动加载

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

最终的项目文件结构似乎是这样的:

在此输入图像描述

我在根目录中创建一个名为 index.php 的文件来测试我的代码,但首先,您应该需要由我们刚刚执行的配置生成的自动加载。

<?php  
  use App\Models\City;
  require __DIR__.'/vendor/autoload.php';
  $city = new City();
  var_dump($city);
Run Code Online (Sandbox Code Playgroud)

结果:

/var/www/myfm/index.php:9:
class App\Models\City#3 (0) {
}
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助你。