PHP: анонимная функция в методе класса - "не видит" импортируемый класс
autoload.php
$basic = function ($classname) {
$classname = str_replace('\\', '/', $classname);
$file = __DIR__ . DIRECTORY_SEPARATOR . "$classname.php";
if (file_exists($file)) {
echo "подключаю фаил: " . $file. "<br>";
require_once($file);
} else {
echo "не смог подключить файл: " . $file . "<br>";
}
};
spl_autoload_register($basic);
TestClass.php
namespace my\pkg\lib;
class TestClass
{
public function __construct(int $num1, int $num2)
{
echo "<hr>" . __CLASS__ . " - успешно создан!-<hr>";
}
}
someClassMaker.php
namespace my\pkg;
use my\pkg\lib\TestClass;
class someClassMaker
{
private $someComponents = []; //(TestClass)
public function __construct()
{
$class = "TestClass";
$args = [15, 35];
$this->someComponents[$class] = function () use ($class, $args) {
//создаём объект ReflectionClass
$rclass = new \ReflectionClass($class);
return $rclass->newInstanceArgs($args);
};
}
public function getComponent($class)
{
return $this->someComponents[$class]();
}
}
test.php
namespace my\pkg;
use my\pkg\lib\TestClass;
include_once $_SERVER['DOCUMENT_ROOT'] . '/autoload.php';
$classMaker = new someClassMaker();
/*пытаюсь получить экземпляр класса TestClass
используя метод объекта "сборщика"*/
$obj = $classMaker->getComponent("TestClass");
После запуска test.php получаю ошибку: Fatal error: Uncaught ReflectionException: Class TestClass does not exist in /php-test.loc/my/pkg/someClassMaker.php
Ошибка при выполнение этой строки:
$rclass = new \ReflectionClass($class);
То есть php не видит из анонимной функции класс TestClass, не смотря на то, что этот класс импортирован с помощью use.
Вопрос: есть ли какой-нибудь способ чтобы TestClass был "виден" в этой анонимной функции, для возможности динамически его создать как в примере?
P.S. Пример максимально упрощён и вырван из контекста. В "реальности", класс someClassMaker предполагается использовать для генерирования разных компонентов типа условного TestClass