On 14/06/2022 12:18, Arnaud Le Blanc wrote:
- The closure mutates a value accessed through a captured variable. Mutable
values include objects and resources, but NOT scalars or arrays (since they
are copy-on-write).
It's not something that is used very often, so is often forgotten or
ignored, but there is technically an edge case where arrays are mutable:
they can contain references, and the references remain "live" even when
the array itself is passed by value.
So although unlikely, it is possible for a by-value closure to
over-write variables in other scopes: https://3v4l.org/dPZlI
// plain variable
$a = 42;
// array containing a reference
$b = [
'a' => &$a
];
// capture the array by-value
$f = function() use($b) {
// update the reference from inside the closure
$b['a'] = 69;
};
// call it
$f();
// observe that both the array and the plain variable now have the new value
var_dump($a, $b);
--
Rowan Tommins
[IMSoP]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php