This proposal is great, but most PHP static analysis tools already do a reasonable job of understanding by-reference assignment and detecting bugs there (an exception is closure use by-reference checks, which is a static-analysis no-man's land).
No static analysis tools catch your specific use-case, though. On Thu, 20 Feb 2020 at 09:48, Levi Morrison via internals < internals@lists.php.net> wrote: > 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. > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > >