5 ms·
I don't like PHP either, but that doesn't mean kneejerk reactions are excusable, and at the least on the first point you are wrong. Using | instead of || is not
by Mithaldu 10y ago
I don't like PHP either, but that doesn't mean kneejerk reactions are excusable, and at the least on the first point you are wrong. Using | instead of || is not an inconsistency, but actually quite consistent.
|| is a short-cutting or comparison operator which returns the first true thing it encounters.
| is a bitwise or combinator, which takes two sets of flags, and combines them into one set of flags that has all flags activated which were also active in the input sets.
Semantically, | is absolutely the correct choice here.
A better question would be why there's a $2 there, though i hope that's just a typo and means $e.
- bpicolo 10y agoBetter yet, don't reinvent the world and just use commas?
- Mithaldu 10y agoCommas would require changing the syntax and implementation of catch. This way exception names just become first class subjects that can be combined with an overloaded operator.
- fredleblanc 10y agoCommas are used in PHP as a sequence of things, not multiple options. This single-pipe notation is already established as the further-up comments states.
- jack9 10y ago> Commas are used in PHP as a sequence of things Choosing a pipe because it's easier for an obscure language feature, is not least astonishment. Commas are used for lists. The pipe is a bad choice among a nice feature.
- arenaninja 10y agoThis is correct. PHP makes extensive use of bitwise operators for function options. For examples, see json_encode, htmlentities, filter_input, etc.
- spdionis 10y agoI didn't understand why the remark was there at all. Honestly | reminds me of sum types and it's the perfect choice here.
- amochohan 10y agoThe reason I added this was because most developers are used to using a double pipe when writing code that has 'or' conditions. I understand the use of pipes for bitwise, but in this case if you read the code in the example, we're basically saying "if the exception is of type A or of type B", personally I'd be inclined to use || if I didn't already know the syntax.
- oneeyedpigeon 10y ago> || is a short-cutting or comparison operator which returns the first true thing it encounters. I wish. The fact that it actually doesn't is one of the things that really bugs me about PHP: <?php var_dump(0 || 42); The above example will output: bool(true)
- Mithaldu 10y ago... ok, i gotta admit i had my Perl hat on for that reply.
- claar 10y agoYou were actually correct -- see my above reply.
- TazeTSchnitzel 10y agoPHP does have the shorthand ternary operator `?:`, though, which does what you want here: $ php -r 'var_dump(0 || 42);' bool(true) $ php -r 'var_dump(0 ?: 42);' int(42)
- oneeyedpigeon 10y agoWow. OK, I am a big user of the ternary operator, but I hadn't come across omission of the middle part until now. To be honest, it's not the most accessible syntax (especially if you're coming from another language), but at least I have the option now - thanks! edit: Just to clarify for anyone else unfamiliar with it: $ php -r 'var_dump(42 ?: 0);' int(42)
- rbritton 10y agoDepending on how far back you have to support (e.g., WordPress is still supporting 5.2), omission of the middle part wasn't supported until PHP 5.3.
- TazeTSchnitzel 10y ago
- amochohan 10y agoIndeed it was a typo, i've now fixed that in the article. Thanks.
- deleted 10y ago[deleted]