On Thu, Nov 26, 2020 at 10:39 AM David Rodrigues <david.pro...@gmail.com> wrote:
> With PHP 8 we have match(), that is a switch strict expression-like. But > strict is not strict, and it could cause confusion because switch() and > match() are pretty similar. > > I agree that PHP deserves the ability to do strict comparisons when requested and that match won't serve all of switch's use cases. This idea has come up a few times in the past, but I think we can perhaps get further with it now that the language is growing more strict-friendly. > (1) strict switch(8.0) { case '8.0'; return 'no'; case 8.0: return 'yes'; } > // yes > Introducing new keywords automatically has a higher bar to acceptance than not, so while this certainly reads well, we do have to consider the impact to existing code defining clases/functions named 'strict'. > (2) switch strict(8.0) { ... } // yes > (3a) switch(8.0, true) { ... } // yes > I'm not a fan of how either of these read. The first on wholly aesthetic grounds, the latter on opacity. The meaning of "true" is inobvious here. > (3b) switch(8.0, strict: true) { ... } // yes (named argument) > > This I like now that we have named arguments. It's a psuedo named argument, but I don't think that distinction matters too much from the userland perspective. Implementation might be a little on the ugly side though, so let's keep it in the maybe pile. > Or then in the "case": > > (4) switch(8.0) { strict case 8.0: ... } // yes > (5) switch(8.0) { case strict 8.0: ... } // yes > > Or allowing operators (this would be the most flexible way, as it would > allow for a number of other features): > > (6) switch(8.0) { case === 8.0: ... } // yes > > These formats have been proposed previously, and I think they're the worst of the lot because now you have a comparison that is potentially sometimes strict and sometimes not. This has the highest potential for surprise. The main question I'd put to you is this: Are there other parts of the language where a strictness modifier would also make sense, or is it unique to `switch`. I suspect it's not, so list out those syntaxes and identify how the proposed options would translate to them. A general purpose winner may float itself to the top. -Sara