Hello Internals,

We currently have a null coercion operator: ??, but we lack an
anti-null coercion operator.

For example, if I wanted to operate on a header, if-and-only-if it
exists, I'd have to write something like this one-liner:

fn() =>
  ($_SERVER['HTTP_X_MY_HEADER'] ?? null)
  ? md5($_SERVER['HTTP_X_MY_HEADER'])
  : null;

Or something like this:

function() {
  if(!empty($_SERVER['HTTP_X_MY_HEADER']) {
    return md5($_SERVER['HTTP_X_MY_HEADER']);
  }

  return null;
}

This is rather tedious when you have to do it, so, I'd like to discuss
adding a new "anti-null coercion" operator: ?!

This would collapse the previous verbose code into:

fn() =>
  $_SERVER['HTTP_X_MY_HEADER']
  ?! md5($_SERVER['HTTP_X_MY_HEADER'];

When it is null, it will stay null, thus the above is the same as:

fn() =>
  $_SERVER['HTTP_X_MY_HEADER']
  ?! md5($_SERVER['HTTP_X_MY_HEADER']
  ?? null;

It would have a lower precedence than ?? so that the above line would
read from left to right without requiring parenthesis/brackets. The
operator would only return the right-hand side if the left-hand side
exists (aka, not null), otherwise, it would return null.

I'm not particularly attached to the ?! syntax (since it does, in
fact, look very similar to ?:), so perhaps focusing on the merits of
the idea first, then bikeshedding the syntax later would be a good
approach?

Thoughts?

Robert Landers
Software Engineer
Utrecht NL

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to