@reech

Как правильно создать класс фабричным методом?

В Laravel имею следующие классы:

<?php namespace App\Models;
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 тоже самое не работает?
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
Вам нужно указывать полный путь к классу, вместе с namespace;
$class = 'App\\Models\\' . Str::title($engine) . 'Parser';
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы