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)
我总是得到
致命错误:未捕获错误:类...未在...中找到
谁能帮我?多谢。
为此,我建议您使用 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)
我希望这可以帮助你。