是否可以继承父范围成员属性并将其分配给“ use”语句中的内部变量?

时间:2019-03-07 23:01:03

标签: php syntax closures scoping

以下作品(也适用于对象等):

$b = new stdClass();

$b->a = "foo";
$b->b = "bar";

$example = function () use ($b) {
    echo $b->b;
};
$example();

是否存在一些语法技巧,用于传递某些对象属性/数组成员并将其同时分配给新变量,而无需在外部范围中定义此变量?

这个伪代码示例应演示我的意思:

$b = new stdClass();

$b->a = "foo";
$b->b = "bar";

$example = function () use ($b->b as $prop) {
    echo $prop;
};
$example();

2 个答案:

答案 0 :(得分:3)

为什么不仅仅将其定义为参数并使用它呢?您要尝试执行的功能恰好就是正常功能。

例如并严格按照您在问题中提出的用例进行操作:

$example = function ($prop) {
    echo $prop;
};

$example($b->b);

当然,如果要修改变量,只需将其声明为通过引用传递:

$anotherExample = function (&$prop) {
    echo $prop;
};

use并没有做您想做的事情,也没有这样做的意义。简单地将参数传递给具有函数基本性质的函数即可解决此“问题”。

答案 1 :(得分:1)

如果您指的是在闭包的'use'子句语句中执行该操作,我相信答案是否定的。 'use'子句的全部作用是使您的闭包访问已在父作用域内驻留的一个或多个变量。

如果您想通过'use'修改要包含的变量的实际值,可以通过引用将其传递,以在外部范围内修改原始值,但据我所知,没有赋值允许在该“ use”子句语句的内部使用,该语句将允许您创建一个在闭包范围内可访问的新变量,该变量在外部范围内具有原始变量的值。