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


Ответы (0 шт):