> Le 9 juil. 2025 à 02:47, Juliette Reinders Folmer > <php-internals_nos...@adviesenzo.nl> a écrit : > > L.S., > > I just noticed something which seems odd to me: PHP 8.1 deprecated declaring > a function to return by reference when the return type is void: > > `function &foo() : void {}` results in: > "Deprecated: foo(): Returning by reference from a void function is deprecated" > > However, declaring a function to return by reference when the return type is > "never" does not yield either an error or a deprecation notice: > https://3v4l.org/DWs7t > > I might well be missing something, but this feels a bit strange and > inconsistent to me. > > Should this be fixed by also deprecating return by reference for "never" > functions ? > > Smile, > Juliette > >
Hi Juliette, The two cases are subtly different, and this can be illustrated by the following example: Suppose you have an interface mandating to implement a method that returns something by reference. When you implement that interface, you must provide a method that returns by reference, but you are free to actually never return from it—restricting the return type to `never`. On the other hand, you cannot implement it with a method that doesn’t provide a value when returning—changing the return type to `void`. In other words, although the combination of “by reference” and “never” is not useful in isolation, it makes nevertheless sense when you think of “never” as a special case of “a value that satisfies a set of constraints”. —Claude