我在Symfony 4中创建了一个服务,它使我能够恢复文件的每个类PHP的名称,并通过循环实例化每个类。
但我有这个错误,这是合乎逻辑的,因为我不会为每个班级使用“使用”:
尝试加载课程" MyClass"来自全局命名空间。难道 你忘记了"使用" " App \ Service \ Adapter \ MyClass"?
的声明
我希望我的文件中的每个文件都在我的服务中自动使用。这可能吗?
我的代码:
<?php
declare(strict_types = 1);
namespace App\Service\Factory;
use App\Service\Adapter\AdapterInterface;
use Doctrine\ORM\EntityManagerInterface;
use function dump;
use function explode;
use function scandir;
/**
* Class ArticleFactory
*
* @package App\Service\Factory
*/
class ArticleFactory
{
/**
* @var EntityManagerInterface
*/
protected $entityManager;
protected $pathService;
/**
* ArticleFactory constructor.
*
* @param EntityManagerInterface $entityManager
* @param $pathService
*/
public function __construct(EntityManagerInterface $entityManager, $pathService)
{
$this->entityManager = $entityManager;
$this->pathService = $pathService;
}
public function adapters(): void
{
$scandir = scandir($this->pathService . '/Adapter', SCANDIR_SORT_NONE);
$adapters = [];
foreach ($scandir as $key => $value) {
if ($value !== '.' && $value !== '..' && $value !== 'AdapterAbstract.php' && $value !== 'AdapterInterface.php') {
$cuttedString = explode('.php', $value);
$className = $cuttedString[0];
$adapters[] = new $className($this->entityManager);
}
}
foreach ($adapters as $adapter) {
if ($adapter instanceof AdapterInterface) {
$adapter->rss();
$article = $adapter->adapt();
foreach ($article as $item) {
$this->entityManager->persist($item);
}
}
}
$this->entityManager->flush();
}
}
我对此进行了测试,但它不起作用:
use App\Service\Adapter;
并且:
use App\Service\Adapter\*;
并且:
$className = '\\'.$cuttedString[0];
$adapters[] = new $className($this->entityManager);
答案 0 :(得分:0)
如果文件(或类)不使用任何名称空间,那么它将放在全局名称空间中。您可以使用反斜杠()作为前缀来实例化这些类。例如:
$myClass = new \MyClass();
$datetime = new \DateTime();