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

问题描述 投票:-1回答:2

以下作品(也包括对象等):

$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();
php syntax closures scoping
2个回答
3
投票

为什么不将它定义为参数并用它来完成?你要做的是究竟什么功能正常。

例如。并完全遵循您在问题中提出的用例:

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

$example($b->b);

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

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

use没有做你想做的事,也没有太多意义。简单地将参数传递给函数,这是函数的基本性质,解决了这个“问题”。


1
投票

如果你指的是在闭包的'use'子句声明中采取该行动,我相信答案是否定的。所有'use'子句都允许您对(a)已在父作用域内驻留的变量进行闭包访问。

如果你想通过'use'来修改你所包含的变量的实际值,你可以通过引用传递它来修改外部范围中的原始值,但据我所知,在内部不允许任何赋值。 'use'子句语句允许您创建一个在闭包范围内可访问的新变量,该变量具有外部作用域中原始变量的值。

© www.soinside.com 2019 - 2024. All rights reserved.