我需要使用一个变量在array_map()的回调中定义一个lambda函数.对于我引用的变量,我收到一条"未定义的变量"警告.随后,我没有得到预期的结果.预期结果和实际结果在下面的代码中进行了注释.给出了该问题的一个PHPSandbox .

$a = "hello";
$$a = "world";

# Prints "world" as expected.
echo $hello;

# GIVES WARNING !!!! (Undefined variable $hello)
$res = array_map(fn($number) => $number . $$a, ["1", "2"]);

# Expected: ["1 world", "2 world"]
# Actual: ["1", "2"]
echo var_dump($res);

PHP Sandbox

已try :

  1. 将$$a替换为${$a}未解决问题.
  2. 用$Hello替换$$a可以解决问题,但该解决方案不适用于我的特定用例.
  3. 我try 使用其他函数来代替串联(fn($number)=>func($number,$$a)),但问题仍然存在.

推荐答案

您的问题是由于作用域规则造成的.$$a不在函数的局部作用域中,而$world是一个常规变量,您已经在与ARRAY_MAP函数相同的作用域中定义了它,因此它可以被识别并可以在函数内部使用.

$a = "hello";
$$a = "world";
$world = $$a;

$res = array_map(fn($number) => $number . $world, ["1", "2"]);

var_dump($res);

Php相关问答推荐

Laravel通过(扩展FormRequest类)方法验证表单请求

致命错误:无法使用简单的php博客重新声明spl_autoload_Register()

将产品类别添加到WooCommerce产品附加信息

在特定订单状态更改时自定义WooCommerce订单发货项目

如何保存基于用户 Select 的复选框 Select 模式

限制某些产品只能在WooCommerce的特定邮政编码/邮政编码范围内发货

Symfony Validator:如何使用XML表示法验证深度嵌套的数据?

Select 本地提货时隐藏WooCommerce显示的发货成本

PHP 8.2 弃用日志(log)存储在 Laravel 10.22.0 中的哪里?

奇怪的 preg_match_all() 行为

使用产品自定义字段作为 WooCommerce 中特定用户角色的折扣百分比

提交仅包含活动详细信息选项卡表单的主表单

在这个 Laravel 应用中,如何仅显示已批准的 comments 回复?

仅允许减少 WooCommerce 中已完成订单的库存数量

如何通过额外的属性和本地化来使用 laravel 枚举

使用 Process facade 在外部 Laravel 项目上运行 Artisan 命令会返回主项目的数据库错误

从 CSV 文件 seeder 数据库时的额外行

使用循环和引用而不是递归创建分层/父子数组

用于多态服务的 Symfony setter 注入

Symfony $this->getUser() 没有学说关联(OneToMany)