rfc:isset_ternary

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:isset_ternary [2014/09/20 01:59] – Moar precedence ajfrfc:isset_ternary [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== PHP RFC: Null Coalesce Operator ====== ====== PHP RFC: Null Coalesce Operator ======
-  * Version: 0.2.2+  * Version: 0.2.3
   * Date: 2014-09-06, last updated 2014-09-16   * Date: 2014-09-06, last updated 2014-09-16
-  * Author: Andrea Fauldsajf@ajf.me +  * Author: Andrea Faulds <ajf@ajf.me
-  * Status: In Voting+  * Contributor: Nikita Popov <nikic@php.net> (initial patch) 
 +  * Status: Implemented (PHP 7)
   * First Published at: http://wiki.php.net/rfc/isset_ternary   * First Published at: http://wiki.php.net/rfc/isset_ternary
  
Line 9: Line 10:
 ===== Introduction ===== ===== Introduction =====
  
-PHP is a web-focussed programming language, so processing user data is a frequent activity. In such processing it is common to check for something's existence, and if it doesn't exist, use a default value. Yet the simplest way to do this, something along the lines of ''<nowiki>isset($_GET['mykey']) ? $_GET['mykey'] : ""</nowiki>'', is unnecessarily cumbersome. The short ternary operator, ''?:'' provides a way to do this much more conveniently: ''<nowiki>$_GET['mykey'] ?: ""</nowiki>''. However, this is not good practise, as if the value does not exist it will raise an ''E_NOTICE''. Because of these issues, some sort of ifsetor() operator or a modification to ''?:'''s behaviour to make this common pattern easier has been a frequent request (See References).+PHP is a web-focussed programming language, so processing user data is a frequent activity. In such processing it is common to check for something's existence, and if it doesn't exist, use a default value. Yet the simplest way to do this, something along the lines of ''<nowiki>isset($_GET['mykey']) ? $_GET['mykey'] : ""</nowiki>'', is unnecessarily cumbersome. The short ternary operator, ''?:'' provides a way to do this much more conveniently: ''<nowiki>$_GET['mykey'] ?: ""</nowiki>''. However, this is not good practice, as if the value does not exist it will raise an ''E_NOTICE''. Because of these issues, some sort of ifsetor() operator or a modification to ''?:'''s behaviour to make this common pattern easier has been a frequent request (See References).
  
 ===== Proposal ===== ===== Proposal =====
Line 47: Line 48:
 var_dump(2 ?? 3 ? 4 : 5);      // (2 ?? 3) ? 4 : 5        => int(4) var_dump(2 ?? 3 ? 4 : 5);      // (2 ?? 3) ? 4 : 5        => int(4)
 var_dump(0 || 2 ?? 3 ? 4 : 5); // ((0 || 2) ?? 3) ? 4 : 5 => int(4) var_dump(0 || 2 ?? 3 ? 4 : 5); // ((0 || 2) ?? 3) ? 4 : 5 => int(4)
 +</code>
 +
 +This example demonstrates how it is a short-circuiting operator:
 +
 +<code php>
 +function foo() {
 +    echo "executed!", PHP_EOL;
 +}
 +var_dump(true ?? foo()); // outputs bool(true), "executed!" does not appear as it short-circuited
 </code> </code>
  
Line 63: Line 73:
 As this is a language change, a 2/3 majority is required. A straight Yes/No vote is being held. As this is a language change, a 2/3 majority is required. A straight Yes/No vote is being held.
  
-Voting started on 2014-09-20 and ends 2014-09-27.+Voting started on 2014-09-20 and ended on 2014-09-27.
  
-<doodle title="Approve Null Coalesce Operator RFC and merge patch into master?" auth="ajf" voteType="single" closed="false">+<doodle title="Approve Null Coalesce Operator RFC and merge patch into master?" auth="ajf" voteType="single" closed="true">
    * Yes    * Yes
    * No    * No
Line 71: Line 81:
  
 ===== Implementation ===== ===== Implementation =====
-After the project is implemented, this section should contain  + 
-  - the version(sit was merged to +Merged into master (which will be PHP 7): https://github.com/php/php-src/commit/2d069f640e6cccfa3ba8b1e4f375ade20fb33f64 
-  a link to the git commit(s) + 
-  - a link to the PHP manual entry for the feature+Documented at: http://php.net/manual/en/language.operators.comparison.php
  
 ===== References ===== ===== References =====
Line 95: Line 105:
 ===== Rejected Features ===== ===== Rejected Features =====
 Keep this updated with features that were discussed on the mail lists. Keep this updated with features that were discussed on the mail lists.
 +
 +===== Errata =====
 +
 +The name of this RFC [[http://blog.ajf.me/2015-12-07-poorly-named-rfcs|ought to have been "null coalescing operator", not "null coalesce operator"]].
  
 ===== Changelog ===== ===== Changelog =====
  
 +  * (2016-03-13) Added Errata
 +  * v0.2.3 - Added short-circuit example
   * v0.2.2 - Added precedence example   * v0.2.2 - Added precedence example
   * v0.2.1 - Added chaining example   * v0.2.1 - Added chaining example
   * v0.2 - Overhauled proposal, proposing new operator ''??'' instead of an extension to ''?:''   * v0.2 - Overhauled proposal, proposing new operator ''??'' instead of an extension to ''?:''
   * v0.1 - Created   * v0.1 - Created
rfc/isset_ternary.1411178383.txt.gz · Last modified: 2017/09/22 13:28 (external edit)