Hi all,
First off, this is my first time e-mailing internals or even thinking about submitting RFC. Please forgive me if I fail to follow some kind of convention.
In PHP 7.0, we were given the Null Coalesce operator. For example:
echo $array['key']??"key is not set"
would be the same as:
echo (isset($array['key'])?$array['key']:"key is not set"
This is a great feature, that makes code much cleaner.
This works on the principle that "$array['key']" is "NULL".
I would like to propose a new feature that is as clean as this but is a slightly different use case. This would require a new operator (up for discussion, but an early idea is "?!") For example:
echo (!is_infinite($n1/$n2)?!0);
Would output ($n1/$n2) if it is "true" and 0 if false.
Right now, the closest we have to this is ?: operator. The problem with this is that it could get very messy as you still have to do:
echo (!is_infinite($n1/$n2)?$n1/$n2:0);
I have obviously over simplified the example. You wouldn't have a big problem in this case, but if the subject of the function is much longer, it can become complicated very quickly.
Alternatively, a perhaps more general feature would be to just have the same functionality as the Null Coalesce, but with true/false rather than Null/Not Null.
Please let me know if there is something in these ideas or anyway to improve them. I should also note that I would need a volunteer to implement this as my "C" skills are non-existent and I wouldn't have the confidence to delve into the the PHP source.
Thanks for your time.
Best,
Antony D'Andrea
You have tried the ?: operator?
echo !is_infinite($n1/$n2) ?: 0;
It should returns true or 0, for this case.
2016-11-03 13:02 GMT-02:00 Antony D'Andrea contactme@antonydandrea.com:
Hi all,
First off, this is my first time e-mailing internals or even thinking about submitting RFC. Please forgive me if I fail to follow some kind of convention.
In PHP 7.0, we were given the Null Coalesce operator. For example:
echo $array['key']??"key is not set"
would be the same as:
echo (isset($array['key'])?$array['key']:"key is not set"
This is a great feature, that makes code much cleaner.
This works on the principle that "$array['key']" is "NULL".
I would like to propose a new feature that is as clean as this but is a slightly different use case. This would require a new operator (up for discussion, but an early idea is "?!") For example:
echo (!is_infinite($n1/$n2)?!0);
Would output ($n1/$n2) if it is "true" and 0 if false.
Right now, the closest we have to this is ?: operator. The problem with this is that it could get very messy as you still have to do:
echo (!is_infinite($n1/$n2)?$n1/$n2:0);
I have obviously over simplified the example. You wouldn't have a big problem in this case, but if the subject of the function is much longer, it can become complicated very quickly.
Alternatively, a perhaps more general feature would be to just have the same functionality as the Null Coalesce, but with true/false rather than Null/Not Null.
Please let me know if there is something in these ideas or anyway to improve them. I should also note that I would need a volunteer to implement this as my "C" skills are non-existent and I wouldn't have the confidence to delve into the the PHP source.
Thanks for your time.
Best,
Antony D'Andrea
--
David Rodrigues
On Thu, Nov 3, 2016 at 11:02 AM, Antony D'Andrea <
contactme@antonydandrea.com> wrote:
I would like to propose a new feature that is as clean as this but is a
slightly different use case. This would require a new operator (up for
discussion, but an early idea is "?!") For example:echo (!is_infinite($n1/$n2)?!0);
Would output ($n1/$n2) if it is "true" and 0 if false.
Welcome!
Let me read back what I'm hearing. If the predicate returns truthy, you
want to return the argument to the predicate, otherwise the indicated
default?
How would this be used outside predicates, such as on string functions?
Consider: echo strpos('abc', 'b') ?! 0;
What would this output, and what would the purpose of such a construct be?