>From a PHP developer's POV - when writing a class or refactoring one. I have to catch myself all the time trying to declare ": void" on the constructor. It's mostly a habit from doing so with the other methods in the class. I lean in favor of being able to declare a void return type on a constructor, but only for the aforementioned reason. I have never ran into a use case where I've questioned what the return type is for a constructor. Although I could see newcomers to PHP / Development in general ponder that thought.
Thanks, Jesse Rushlow On Tue, Jun 16, 2020 at 8:59 AM Dan Ackroyd <dan...@basereality.com> wrote: > G.P.B. wrote: > > Seems like a no brainer and a good addition. :) > > For situations where stuff is simple, 'no brainers' are okay. > For situations where everything is horribly convoluted, 'no brainers' > are often bad. > > Benas IML wrote: > > even though no return type means mixed|void > > Not quite. > > No return type is _treated as_ 'mixed|void' in some circumstances > particularly signature checks during inheritance. That's not quite the > same as 'meaning' the same. > > > What I meant, was that since no return type means `mixed|void`, > > you can't do the following: > > I'm actually not sure exactly what you're trying to say there, but I > think pasting the text I reference whenever trying to think about LSP > might be useful... > > "PHP allows contravariance (aka type widening) for parameter types to > obey the LSP principle. A subclass may use a 'wider' aka less specific > type in place of the inherited type for a parameter." > > "PHP allows covariance (aka type narrowing) for return types to obey > the LSP principle. A subclass may use a 'narrower' aka more specific > type in place of the inherited type for a function return." > > > I am proposing to allow void return type for constructors/destructors. > > Constructors in PHP have multiple issues that are 'surprising'. I'm > not sure that fixing only a small part of how they are surprising, > improves PHP drastically. > > Also...I really wish we already had null as a usable type, as most of > the uses of void are slightly inaccurate. > > The meaning of void and null are: > > void - this function doesn't return a value > null - this function returns a value that has no information in it. > > Presumably you want to be able to specify void as the return type to > make it be easier to detect errors in code like the example you > provided. > > It seems that making a rule for whichever static analyzer you're > using, that errors on any assigning of a value from a __construct > call, would achieve that, without touching a part of PHP that is full > of edge cases. > > To be clear, I'm not sure if I am in favour or against the RFC. The > real problem is that constructors just don't fit into how we think > about normal functions is PHP, because of the magic that goes on > around them and so both void and null as return types would be a > little bit incorrect. > > cheers > Dan > Ack > > > > Some example functions using those two return types. > > function this_is_void_return(): void { > exit(0); > } > > function this_is_also_void_return(): void { > throw new Exception("no usuable return value"); > } > > function this_is_also_also_void_return(): void { > while (1) { > echo "Hello world\n"; > } > } > > function this_is_null_return(): null { > // deliberately empty. > } > > // This code is fine. > var_dump(this_is_null_return()); > > // This code is never going to execute the var_dump, which > // might indicate an error. > var_dump(this_is_void_return()); > var_dump(this_is_also_void_return()); > var_dump(this_is_also_also_void_return()); > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > >