rfc:variadic_empty

Differences

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

Link to this comparison view

rfc:variadic_empty [2015/02/21 03:11]
tpunt
rfc:variadic_empty [2017/09/22 13:28]
Line 1: Line 1:
-====== PHP RFC: Make empty() a Variadic ====== 
-  * Version: 0.1 
-  * Date: 2015-02-20 
-  * Author: Thomas Punt, tpunt@hotmail.co.uk 
-  * Status: Draft 
-  * First Published at: http://​wiki.php.net/​rfc/​variadic_empty 
  
-===== Introduction ===== 
-This RFC aims to make the ''​empty''​ language construct accept any number of arguments. 
- 
-<code php> 
-// example current usage #1: 
-if (empty($a) || empty($b) || empty($c)) {} 
- 
-// example current usage #2: 
-if (!empty($a) && !empty($b) && !empty($c)) {} 
- 
-// new example usage #1: 
-if (empty($a, $b, $c)) {} 
- 
-// new example usage #2: 
-if (!empty($a, $b, $c)) {} 
-</​code>​ 
- 
-===== Proposal ===== 
-This RFC proposes to change ''​empty()''​ to have a variable arity, which will enable developers to write more compact code when checking for the emptiness of multiple expressions. 
- 
-As the above snippet demonstrates,​ the semantics of a variadic ''​empty()''​ should be the equivalent to logically OR'ing multiple ''​empty()''​ invocations together. This behaviour seems to be the most useful, and given that ''​empty()''​ performs a reverse check to ''​isset()'',​ it should have reversed semantics in order to make it inline. ... 
- 
-===== Justification ===== 
- 
-==== Common ==== 
-In PHP, it is not uncommon to see conditionals consisting of multiple ''​empty()''​ invocations. This is evident by simply browsing through some popular open source projects: 
- 
-  * WordPress (( https://​github.com/​WordPress/​WordPress/​blob/​master/​wp-admin/​includes/​template.php#​L1963 )) 
-<code php> 
-if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['​content'​] ) ) 
-</​code>​ 
-  * OpenCart (( https://​github.com/​opencart/​opencart/​blob/​45fc863fa068d82b5280890e6466a198faa54bff/​upload/​admin/​controller/​openbay/​ebay_profile.php#​L128 )) 
-<code php> 
-if (empty($setting['​dispatch_times'​]) || empty($setting['​countries'​]) || empty($setting['​returns'​])){ 
-</​code>​ 
-  * phpBB (( https://​github.com/​phpbb/​phpbb/​blob/​040d451dcca9ae54d8f4b7bdd2f231033765a8f2/​phpBB/​phpbb/​notification/​method/​jabber.php#​L48 )) 
-<code php> 
-return !( 
- empty($this->​config['​jab_enable'​]) || 
- empty($this->​config['​jab_host'​]) || 
- empty($this->​config['​jab_username'​]) || 
- empty($this->​config['​jab_password'​]) || 
- !@extension_loaded('​xml'​) 
- ); 
-</​code>​ 
-  * And so on... 
- 
-So this seems like quite a common need for users. 
- 
-The second justification is that it will make ''​empty()''​ more inline with the  ''​isset()'',​ which is good for the principle of least surprise 
- 
-===== Backward Incompatible Changes ===== 
-No BC breakages. 
- 
-===== Proposed PHP Version(s) ===== 
-PHP 7.0 
- 
-===== RFC Impact ===== 
-==== To SAPIs ==== 
-None. 
- 
-==== To Existing Extensions ==== 
-None. 
- 
-==== To Opcache ==== 
-None. 
- 
-==== New Constants ==== 
-None. 
- 
-==== php.ini Defaults ==== 
-None. 
- 
-===== Open Issues ===== 
-None. 
- 
-===== Unaffected PHP Functionality ===== 
-The current functionality of ''​empty()''​ will be completely preserved. 
- 
-===== Future Scope ===== 
-None that I can think of. 
- 
-===== Proposed Voting Choices ===== 
-Include these so readers know where you are heading and can discuss the proposed voting options. 
- 
-State whether this project requires a 2/3 or 50%+1 majority (see [[voting]]) 
- 
-===== 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. 
rfc/variadic_empty.txt · Last modified: 2017/09/22 13:28 (external edit)