是否可以从 PHP 中的闭包返回引用?

Posted

技术标签:

【中文标题】是否可以从 PHP 中的闭包返回引用?【英文标题】:Is it possible to return a reference from a closure in PHP? 【发布时间】:2013-07-04 06:45:49 【问题描述】:

为了从 php 中的函数返回引用,必须:

...使用引用运算符 & in 函数声明和将返回值分配给 一个变量。

这最终看起来像:

function &func()  return $ref; 
$reference = &func();

我正在尝试从闭包返回引用。在一个简化的例子中,我想要实现的是:

$data['something interesting'] = 'Old value';

$lookup_value = function($search_for) use (&$data) 
    return $data[$search_for];


$my_value = $lookup_value('something interesting');
$my_value = 'New Value';

assert($data['something interesting'] === 'New Value');

我似乎无法从正常工作的函数返回引用的常规语法。

【问题讨论】:

【参考方案1】:

您的代码应如下所示:

$data['something interesting'] = 'Old value';

$lookup_value = function & ($search_for) use (&$data) 
    return $data[$search_for];
;

$my_value = &$lookup_value('something interesting');
$my_value = 'New Value';

assert($data['something interesting'] === 'New Value');

签出this:

【讨论】:

合而为一。要记住的另一个奇怪的语法选择。谢谢!

以上是关于是否可以从 PHP 中的闭包返回引用?的主要内容,如果未能解决你的问题,请参考以下文章

python之闭包,装饰器

如何存储和使用接受引用并返回未来的可选闭包?

什么是闭包(closure),为什么要用它?

无法为返回引用的闭包推断适当的生命周期

Python装饰器

Go之闭包函数