====== PHP RFC: Isset/Set Operator ======
* Version: 0.1
* Date: 2013-11-24
* Author: Chris London, me chrislondon co
* Status: Draft (Inactive)
===== Introduction =====
Two new operators. ?= for setting the value of an unset or falsey variable. And ??: which acts like ?: except it it also checks is set.
===== Proposal =====
?= Will be a new operator that allows the user to set an unset or falsey variable. This handy operator will help avoid dreaded unset variable notices.
$foo ?= 'default';
// which is functionally equivalent to:
$foo = (isset($foo) && $foo) ? $foo : 'default';
// or
if (!isset($foo) || !$foo) $foo = 'default';
??: will be equivalent to the ternary short hand ?: except that it also checks for isset().
// $bar is unset
$foo = $bar ?: 'other'; // Throws undefined notice
$foo = $bar ??: 'other'; // Does NOT throw undefined notice
// ??: is functionally equivalent to:
$foo = (isset($bar) && $foo) ? $bar : $other;
This will be very helpful for echoing default variables in HTML like so:
...
===== Backward Incompatible Changes =====
Nothing yet.
===== Proposed PHP Version(s) =====
Next PHP 5.x
===== SAPIs Impacted =====
Not yet known.
===== Open Issues =====
**Possible Alternatives To ?= Operator**
- ?:=
- ||=
- @=
**Possible Alternatives To ??: Operator**
- ?::
- ?: (backward compatibility concerns)
- || (backward compatibility concerns)
- @:
===== Unaffected PHP Functionality =====
===== Future Scope =====
This sections details areas where the feature might be improved in future, but that are not currently proposed in this RFC.
===== Proposed Voting Choices =====
Include these so readers know where you are heading and can discuss the proposed voting options.
===== Patches and Tests =====
Links to any external patches and tests go here.
If there is no patch, make it clear who will create a patch, or whether a volunteer to help with implementation is needed.
Make it clear if the patch is intended to be the final patch, or is just a prototype.
===== Implementation =====
After the project is implemented, this section should contain
- the version(s) it was merged to
- a link to the git commit(s)
- a link to the PHP manual entry for the feature
===== References =====
Links to external references, discussions or RFCs
===== Rejected Features =====
Keep this updated with features that were discussed on the mail lists.