#php #namespaces #composer-php #autoload
#php #пространства имен #композитор-php #автозагрузка
Вопрос:
Я пытаюсь создать свой собственный проект composer и пытаюсь протестировать код, чтобы убедиться, что он работает, когда я начинаю его создавать. Я прочитал десятки руководств и вопросов о переполнении стека, и все, кажется, указывают на то, что я все делаю правильно, хотя, поскольку это не работает, я полагаю, что это не так.
У меня есть файловая структура:
index.php
composer.json
composer.lock
vendor/
src
Frankenstein
DB
|FrankensteinDB.php
и сделали composer.json выглядеть следующим образом:
{
"autoload": {
"psr-4" : {"Frankenstein\":"src/Frankenstein"}
},
"require": {
"enrise/frisbee": "0.1.0"
}
}
FrankensteinDB.php выглядит так:
<?php
namespace FrankensteinDB;
use FrisbeeExceptionFlingable;
class FrankensteinDB extends Flingable
{
public function __construct($name)
{
parent::__construct($name, 1337);
}
public function run()
{
}
public function next()
{
}
}
и, конечно, наконец, index.php заключается в следующем:
<?php
require_once 'vendor/autoload.php';
use FrankensteinDBFrankensteinDB;
try {
throw new FrankensteinDB('frankenstein');
} catch (Error $e){
$e->getCode();
}
каждый раз, когда я запускаю код, я получаю Class 'FrankensteinDBFrankensteinDB' not found
и я просто не могу понять, почему. Я перепробовал все комбинации папок в части namespace, use и composer psr-4, и, похоже, ничего не работает. Я также запускаю composer update после каждого изменения, чтобы убедиться, что файлы автозагрузки восстанавливаются.
Комментарии:
1. Код правильный, за исключением перехвата
Error
вместоFrankensteinDB
илиException
. Кроме того, вы не можете видеть результаты$e->getCode();
. Вы, вероятно, хотели что-то вывести. Попробуйтеvar_dump($e->getCode();
2. @RuslanOsmanov Ошибка, которую я улавливаю, — это ошибка FrankensteinDB, которая не найдена, у меня есть специальный обработчик ошибок для FrankensteinDB в пакете frisbee.
3. Структура и опубликованный вами код действительно работают (я только что протестировал это). Как я уже упоминал, он работает некорректно, но работает без
class not found
ошибок. Попробуйте воспроизвести его с нуля (в другом каталоге). Попробуйте обновить сам composer. Попробуйте протестировать его из CLI:php index.php
.4. Ха, это действительно работает. Интересно, что не так с папкой, в которой он у меня есть.