Я создаю анонимный объект следующим образом:
$factory = (object) [ 'router' => new AltoRouter(), 'user' => null ];
Затем я загружаю пользователя так:
if( !empty( $_SESSION['usid'] ) )
$factory->user = ( new UserController() )->loadUserBySession( $_SESSION['usid'] );
Тем не мение, AltoRouter использует функции для динамического отображения URI, и примером этого является:
$factory->router->map('GET|POST', '/pretty/url', function() {
echo 'But this cannot access the $factory->user object to get the current user.';
});
Я знаю, что могу изменить function()
в function() use ($factory)
но маршрут может быть активирован за пределами объем который имеет доступ к $factory
, Я хочу добиться чего-то вроде:
class Factory {
public static $user;
}
$factory->router->map('GET|POST', '/pretty/url', function() {
Factory::$user->doSomething();
});
Но используя анонимные объекты.
Задача ещё не решена.
Других решений пока нет …