PHP use() 函数的作用域?

发布于 2024-12-11 11:44:19 字数 123 浏览 2 评论 0原文

我见过这样的代码:

function($cfg) use ($connections) {}

但 php.net 似乎没有提到该功能。我猜这与范围有关,但是如何呢?

I have seen code like this:

function($cfg) use ($connections) {}

but php.net doesn't seem to mention that function. I'm guessing it's related to scope, but how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

站稳脚跟 2024-12-18 11:44:19

use 不是一个函数,它是 闭包语法的一部分。它只是使外部作用域的指定变量在闭包内可用。

$foo = 42;

$bar = function () {
    // can't access $foo in here
    echo $foo; // undefined variable
};

$baz = function () use ($foo) {
    // $foo is made available in here by use()
    echo $foo; // 42
}

例如:

$array = array('foo', 'bar', 'baz');
$prefix = uniqid();

$array = array_map(function ($elem) use ($prefix) {
    return $prefix . $elem;
}, $array);

// $array = array('4b3403665fea6foo', '4b3403665fea6bar', '4b3403665fea6baz');

use is not a function, it's part of the Closure syntax. It simply makes the specified variables of the outer scope available inside the closure.

$foo = 42;

$bar = function () {
    // can't access $foo in here
    echo $foo; // undefined variable
};

$baz = function () use ($foo) {
    // $foo is made available in here by use()
    echo $foo; // 42
}

For example:

$array = array('foo', 'bar', 'baz');
$prefix = uniqid();

$array = array_map(function ($elem) use ($prefix) {
    return $prefix . $elem;
}, $array);

// $array = array('4b3403665fea6foo', '4b3403665fea6bar', '4b3403665fea6baz');
满身野味 2024-12-18 11:44:19

它告诉匿名函数使$connections(一个变量)在其范围内可用。

如果没有它,$connections 将不会在函数内部定义。

文档

It is telling the anonymous function to make $connections (a parent variable) available in its scope.

Without it, $connections wouldn't be defined inside the function.

Documentation.

煮茶煮酒煮时光 2024-12-18 11:44:19

只是对答案的补充

$bok = fn() => "don't need to use $foo";

echo $bok(); // don't need to use 42

Just an addition to the answer

$bok = fn() => "don't need to use $foo";

echo $bok(); // don't need to use 42
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文