如何将参数传递给匿名函数

How to pass parameter to anonymous function

提问人:dokgu 提问时间:3/18/2022 更新时间:3/18/2022 访问量:152

问:

我正在使用一个库来跟踪PHP应用程序中的错误。

我复制并粘贴了他们提供的关于如何初始化库的代码,并将其集成到我的类声明中:__construct()

function __construct($username = null) {
    parent::__construct();

    if(SENTRY === true) {
        if(!empty($username)) {
            Sentry\configureScope(function (Sentry\State\Scope $scope): void {
                $scope->setUser(['username' => $username]);
            });
        } else if(!empty($_SESSION['username'])) {
            Sentry\configureScope(function (Sentry\State\Scope $scope): void {
                $scope->setUser(['username' => $_SESSION['username']]);
            });
        } else {
            Sentry\configureScope(function (Sentry\State\Scope $scope): void {
                $scope->setUser(['username' => null]);
            });
        }
    }
}

现在我知道我总是可以将会话添加到会话中并从那里获取它,然后可能在初始化库后取消设置它,但我宁愿不走这条路。在配置库的作用域时,如何将变量传递给匿名函数?$username

php 参数 parameter-passing anonymous-function

评论


答:

1赞 dokgu 3/18/2022 #1

我通过做以下操作让它工作:

Sentry\configureScope(function (Sentry\State\Scope $scope) use ($username) : void {
    if(!empty($username)) {
        $scope->setUser(['username' => $username]);
    } else if(!empty($_SESSION['username'])) {
        $scope->setUser(['username' => $_SESSION['username']]);
    } else {
        $scope->setUser(['username' => null]);
    }
});
0赞 Milad Elyasi 3/18/2022 #2
$x = 123;
Sentry\configureScope(function (Sentry\State\Scope $scope) use($x) : void {
                // you may use $x
                $scope->setUser(['username' => $_SESSION['username']]);
            });