PHP пространство имен и использование класса фатальной ошибки не найден, даже если я уже указал класс с использованием - PullRequest
0 голосов
/ 20 июня 2020

У меня проблемы с пространством имен в PHP. Например, у меня есть такой файл

namespace App\Models\Abstracts;
abstract class Country{}

, а затем другой файл, подобный этому

namespace App\Models;

use App\Models\Abstracts\Country;

class City extends Country{}

Я всегда получаю

Fatal error: Uncaught Ошибка: Класс ... не найден в ...

Кто-нибудь может мне помочь? большое спасибо.

1 Ответ

1 голос
/ 20 июня 2020

Для этого я советую вам использовать PSR (psr-4).

Сначала давайте создадим структуру файлов, как показано ниже:

enter image description here

Now let's init the composer to configure the psr-4.

jump to the root of the project (in this example the root directory of src), and run :

you will be asked to fill some project information, just skip it

composer init

A file named composer.json will be created in the root directory, let's configure the psr-4 inside.

{
    "name": "root/project",
    "autoload": {
      "psr-4": {
        "App\\": "src/"
      }
    }
}
  

Learn more about psr- 4

, чтобы навести указатель мыши, мы просто говорим PSR указать имя App на каталог sr c, а затем имя подпапки должно совпадать с фамилией в вашем пространстве имен.

Пример:

App => src directory 
App\Models => src/Models directory

И так далее

Затем вы должны сгенерировать автозагрузку с помощью

composer dump-autoload

Окончательная файловая структура проекта выглядит быть примерно таким:

введите описание изображения здесь

Я создаю файл с именем index. php в каталоге root для тестирования моего кода, но сначала вам потребуется автозагрузка, которая была сгенерирована только что выполненной конфигурацией.

<?php

use App\Models\City;

require __DIR__.'/vendor/autoload.php';

$city = new City();

var_dump($city);

Результат:

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

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...