Как правильно создать класс фабричным методом? В Laravel имею следующие классы:use Illuminate\Support\Str;
interface IParser {
public function get();
}
class ParserFactory {
public static function create($engine)
{
$class = Str::title($engine) . 'Parser';
return new $class;
}
}
class FirstParser implements IParser {
public function get()
{
echo 1;
}
}
Создаю класс следующим образом:$engine = 'first';
$parser = ParserFactory::create($engine);
В итоге получаю ошибку:FatalErrorException in Parser.php line 14: Class 'FirstParser' not found
Если в фабричном методе написать:public static function create($engine)
{
$class = new FirstParser();
return $class;
}
То всё работает, класс создается. Не понимаю, почему с помощью new $class тоже самое не работает?

21 Авг 2019 в 07:07
276 +1
0
Ответы
1

Проблема заключается в том, что метод Str::title() возвращает строку, начинающуюся с заглавной буквы, но не преобразует её в нижний регистр. Поэтому, когда вы пытаетесь создать класс с помощью new $class, PHP ищет класс с таким же именем, как результат метода Str::title(), который начинается со заглавной буквы.

Для исправления этой проблемы нужно преобразовать результат метода Str::title() в нижний регистр, а затем создать класс. Вот как это можно сделать:

class ParserFactory {
public static function create($engine)
{
$class = Str::title($engine) . 'Parser';
$class = 'App\Models\\' . $class; // добавляем пространство имен к имени класса
$class = app()->make($class); // создаем класс с помощью сервис-контейнера Laravel
return $class;
}
}

Теперь ваш фабричный метод должен правильно создавать классы на основе переданного движка.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 757 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир