Re: Empty subject in match and switch constructions

From: Date: Wed, 17 Dec 2025 11:09:26 +0000
Subject: Re: Empty subject in match and switch constructions
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-129632@lists.php.net to get a copy of this message
> On Feb 2, 2025, at 4:04 PM, Dmitry Derepko <xepozzd@gmail.com> wrote: > > Hi! > > I’m thinking about making match (true) and switch (true) be more lightweight by removing the > subject “(true)” and making matching “true condition” by default. > So $var = match (true) { … } can be used as $var = match { … }. > > It’s often used in Kotlin. Pretty convenient way to use combined conditions. It’s natively > understandable because there should be a condition: > > $result = match { > $x < $n => …, > $x > $n => …, > else => …, > } > > The same explanation for switch construction, but in Kotlin it’s the same construction > “when": > > > val result = when { > x < n -> … > x > n -> … > else -> … > } > > var result = null > when { > x < n -> { result = … } > x > n -> { result = … } > else -> return > } > > >https://kotlinlang.org/docs/control-flow.html#when-expressions-and-statementswhen > construction is overwhelming, but some features are totally handy, such as checking for class of the > subject: > when (obj) { > is Class1 -> … > is Class2 -> … > else -> ... > } > > Which was implemented by Ilija Tovilo in: > https://github.com/php/php-src/compare/master...iluuu1994:pattern-matching > > By the way, what do you think about allowing to drop the subject of match / switch as a first > iteration? > Maybe would be better to ask Ilija to recreate his PR? > > > ---------- > > Best regards, > Dmitrii Derepko. > @xepozz I would like to bring the discussion up and try to figure out all pros and cons of this ability. Moreover, coming Pattern Matching is a great addition to have this merged: $x = match { $a is “pattern” -> … $b is “pattern” -> … $c === null -> … $this->lastChance($d) -> … default -> ... } Again, it should work as it would have (true) context. So the following snippet: var_dump(match(true) { 1=>'one', 0=>'zero', default=>'default', }); will produce “default”, because “true” is not “1” and “0”. IDE may highlight such cases because they’ll never match so it would be detected as dead code. ---------- Best regards, Dmitrii Derepko. @xepozz

« previous php.internals (#129632) next »