On Thu, Nov 26, 2020 at 5:39 PM David Rodrigues <david.pro...@gmail.com> wrote:
> Hello! > > 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 believe that this has already been discussed, but it would be interesting > to re-evaluate the possibility of a strict() with support for strict. > > In order not to generate BC, my suggestion is to attach a specific keyword > for this purpose, or a similar alternative. > > (0) switch(8.0) { case '8.0'; return 'no'; case 8.0: return 'yes'; } // no? > > (1) strict switch(8.0) { case '8.0'; return 'no'; case 8.0: return 'yes'; } > // yes > (2) switch strict(8.0) { ... } // yes > (3a) switch(8.0, true) { ... } // yes > (3b) switch(8.0, strict: true) { ... } // yes (named argument) > > 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 > > > > Atenciosamente, > David Rodrigues > I think the better direction here would be to improve match() such that it can replace more of the current switch use cases. If match supported block expressions, then most uses of switch() could use match() instead, and as such make use of the strict comparison semantics. Only switches that make use of non-trivial fallthrough behavior could not be easily expressed using match. Nikita