Re: [RFC] Explicit call-site pass-by-reference (again)
| From: | Levi Morrison via internals | Date: | Thu, 20 Feb 2020 14:47:51 +0000 |
| Subject: | Re: [RFC] Explicit call-site pass-by-reference (again) | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-108700@lists.php.net to get a copy of this message | ||
Just chiming in to voice strong support for this RFC. This is a key
piece toward making PHP code statically analyzable. If it becomes
required at the call site, such as in an edition of the language, it
will significantly enhance the ability to reason about code and
probably make it more correct as well. As a small example, consider
this method on an Optional type class:
function map(callable $f): Optional {
if ($this->enabled) {
return new Optional($f($this->data));
} else {
return $this;
}
}
The intent is to return a new optional or an empty one, but if you
pass a closure that accepts something by reference you can change the
original, which is not intended at all. For people who defend against
it, it requires saving
$this->data to a local variable, then passing
in the local. Then if the user does a call-by-reference it will affect
the local, not the object's data.