On Tue, Feb 23, 2021 at 11:27 PM Mike Schinkel <m...@newclarity.net> wrote:
> > On Feb 23, 2021, at 2:05 PM, Rowan Tommins <rowan.coll...@gmail.com> > wrote: > > > > On 23/02/2021 18:41, Albert Casademont wrote: > >> Sure, it's not a big deal having to write the ": null" but it doesn't > add > >> any value > > > > > > On the contrary, it adds an important piece of information: that the > default value is "null", rather than "false", or "0", or "new EmptyValue()". > > For instance, it doesn't seem at all obvious to me that this code should > produce a null: > > > > $items = []; > > $itemCount = $items ? count($items); > > > > I might be more convinced that "null" is the "natural" value if the > left-hand operand was only checked against null, not "falsiness": in that > case, you can read it as "if it's null, leave it alone". I'd still be > inclined towards "too specific to use up more syntax", though. > > If you look at it from a software engineering perspective — which is how I > assume most on this thread have been looking at it — being more explicit in > the code is probably a better practice than saving a few keystrokes. > > OTOH, if you view it from the perspective of a *templating* language — > which is what PHP was initially created to be, for the web — then the > reduction in visual noise from omitting ": null" would be a nice plus. And > in the case of templating, the distinction between null vs. false vs. "" > would be completely moot. > > But PHP isn't just a templating language anymore. If PHP currently had support for omitting the third argument on the ternary operator, then I'd be against changes that required it given the BC implications. I think just dropping the need for a third argument on the existing ternary operator is a bad idea. I'm ambivalent when it comes to creating a new symbol to support this behavior (e.g. ?!). I don't really think it's necessary, but, I don't think it hurts anything either. > Repeating code similar to that from the message sent by David Rodrigues > you can see that eliminating the ": null" is less noisy: > > <div class="user <?php user ? 'online' : null ?>">...</div> > <div class="user <?php user ? 'online' ?>">...</div> > > Although one ":null" eliminated is not that significant, PHP templates > for generating HTML are notorious for having conditionals littered > throughout, with tens if not hundreds of cases per file. So being able to > drop the ":null" would be a really nice addition for templating. > > To emphasize this feature address templating use-cases one might argue > that dropping the "or" case of the trinary might only be supported when > between single-line "<?php" and "?>" delimiters. > > -Mike > > P.S. Of course making it work differently between single-line delimiters > and elsewhere would create inconsistency in the language so I probably > would not actually argue that, I was just trying to make a rhetorical point. > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > > -- Chase Peeler chasepee...@gmail.com