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.
> >
>

Reply via email to