I just feels that !empty($arr['key']) or isset($arr['key']) do not express the real meaning, instead I would choose to write array_key_exists('key', $arr). It may be slower but it clearly express what I meant.
Regarding the operators, I believe they will do more harm than good. To check if a variable was already defined is a bad programing habit, these operators will encourage that kind of things In the other hand, the isset check inside the condition ?: would silently improve not-so-well written code, and could be a good feature for the lang. Martin Scotta On Fri, Apr 8, 2011 at 11:27 AM, Hannes Landeholm <landeh...@gmail.com>wrote: > I think "?!" wouldn't work as an operator as it would conflict with ternary > comparision + not operator. Also I don't see the point of adding an > operator > for "empty" as the function/construct itself is pretty confusing and > non-useful as you have to memorize all the things that happen to be > considered "empty" by it and those things has too align up with the things > you want to check for by chance. (I never use it.) > > Empty-ness is just one of a billion things you might want to write a > comparison for (and it's not even well defined). Having an operator for > that > would be crazy. Dealing with possibly undefined indexes/properties is a > very > common use case though which is why I think it deserves an operator. The > "empty comparison" thing is a _separate issue_ and it can simply be dealt > with by separating the assignment and comparison into two expressions... > > ~Hannes > > On 8 April 2011 15:19, Rune Kaagaard <rumi...@gmail.com> wrote: > > > Dear Internals > > > > I'm very happy that this is getting some attention again. Please allow > > me to give my 2 cents too. The text below can also be seen nicely > > formatted at https://gist.github.com/909711. > > > > ## Intro ## > > > > Isset and IsNotEmpty operators have for sure been a hot topic for several > > years > > now and in my opinion rightly so. The non-DRY style of: > > > > $my_array['my_long_boring_key'] = > > !empty($my_array['my_long_boring_key']) > > ? $my_array['my_long_boring_key'] : 'Default value'; > > $my_array['my_long_boring_key'] = > isset($my_array['my_long_boring_key']) > > ? $my_array['my_long_boring_key'] : 'Default value'; > > > > is a true day-to-day hassle and addressing this annoyance would be a > > big win for > > the PHP community as a whole. As PHP has two keywords `isset` and `empty` > > that > > can check for a non existing variable without throwing errors I think > there > > should exist two assignment/ternary operators who mirror those. > > > > I have been thinking [1] about the same problem for my meta language Snow > > and > > also ended up using `??` as an isset operator. > > > > ## Proposal ## > > I propose that two new operators `??` (IssetOperator) and `?!` > > (NotEmptyOperator) are added. `??` mirrors `isset` and `?!` mirrors > > `!empty`. > > They are chainable ad nauseum but not with each other. > > > > They would work like this: > > > > ### Example 1 : Ternary shortcut ### > > Old syntax: > > $a = isset($b) ? $b : 42; > > $a = !empty($b) ? $b : 42; > > > > New syntax: > > $a = $b ?? 42; > > $a = $b ?! 42; > > > > ### Example 2 : Direct assignment ### > > Old syntax: > > $arr['key'] = isset($arr['key']) ? $arr['key'] : 42; > > $arr['key'] = !empty($arr['key']) ? $arr['key'] : 42; > > > > New syntax: > > $arr['key'] ??= 42; > > $arr['key'] ?!= 42; > > > > ### Example 3 : Works with statements too ### > > Old syntax: > > // a) > > $tmp = get_stuff('foo'); > > $a = isset($tmp) ? $tmp : 42; > > > > // b) > > $tmp = get_stuff('foo'); > > $a = !empty($tmp) ? $tmp : 42; > > > > New syntax: > > // a) > > $a = get_stuff('foo') ?? 42; > > > > // b) > > $a = get_stuff('foo') ?! 42; > > > > ### Example 4 : Chaining ### > > Old syntax [2]: > > $a = false; > > if (!empty($c) { > > $a = $c; > > } else { > > $tmp = get_stuff(); > > $a = !empty($tmp) ? $tmp : false; > > } > > if ($a === false) { > > $a = !empty($c) ? $c : 42; > > } > > > > New syntax: > > $a = $c ?! get_stuff() ?! $b ?! 42; > > > > ### Example 5 : Illegal syntax ### > > $a = $d ?? $c ?! $b ?? 42; // `??` and `?!` cannot be mixed. > > > > ## References ## > > * [1]: http://code.google.com/p/php-snow/wiki/EmptyIssetOperators > > * [2]: This could also be done by nesting ternary operators, but that > > gets > > even more unreadable I think. > > >