Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision |
rfc:variadic_empty [2015/02/25 18:05] – tpunt | rfc:variadic_empty [2015/03/28 15:54] – tpunt |
---|
* Date: 2015-02-20 | * Date: 2015-02-20 |
* Author: Thomas Punt, tpunt@hotmail.co.uk | * Author: Thomas Punt, tpunt@hotmail.co.uk |
* Status: Under Discussion | * Status: Declined |
* First Published at: http://wiki.php.net/rfc/variadic_empty | * First Published at: http://wiki.php.net/rfc/variadic_empty |
| |
The proposal is to change ''empty()'' so that it can accept multiple arguments. This will enable developers to write more compact code when checking for the emptiness of multiple expressions. | The proposal is to change ''empty()'' so that it can accept multiple arguments. This 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 together multiple ''empty()'' invocations. Thus, if //any// arguments passed into ''empty()'' are considered falsy, then **true** will be returned - otherwise, **false** is returned. This behaviour is the most logical (given ''empty()''s falsy semantics) and seems to be the most prevalent usage of multiple empty checks in a condition, therefore benefitting the most end users. | As the above snippet demonstrates, the semantics of a variadic ''empty()'' should be the equivalent to logically OR'ing together multiple ''empty()'' invocations. Thus, if //any// arguments passed into ''empty()'' are considered falsy, then **true** will be returned; if //no// arguments are considered empty, then **false** is returned. This behaviour is the most logical (given ''empty()'''s falsy semantics) and seems to be the most prevalent usage of multiple empty checks in user-land code (therefore being the most beneficial behaviour). |
| |
===== Justification ===== | ===== Justification ===== |
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: | 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 )): | WordPress (( https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/template.php#L2007 )): |
<code php> | <code php> |
if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['content'] ) ) | if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['content'] ) ) |
And so on... | And so on... |
| |
So this seems like quite a common need for users, and one that cannot be emulated in user-land code because of ''empty()'''s behaviour of suppressing undefined variables. | So this seems like quite a common need for users, and one that cannot be emulated in user-land code because of ''empty()'''s behaviour of suppressing undefined variable errors. |
| |
Also, this will make ''empty()'' more inline with the not-too-dissimilar ''isset()'', which is good for the [[http://en.wikipedia.org/wiki/Principle_of_least_astonishment|Principle of Least Astonishment]] (mainly aimed at neophyte developers). | This change will also make ''empty()'' more inline with the not-too-dissimilar ''isset()'', which is good for [[http://en.wikipedia.org/wiki/Principle_of_least_astonishment|POLA]]. |
| |
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== |
The current functionality of ''empty()'' will be completely preserved. | The current functionality of ''empty()'' will be completely preserved. |
| |
===== Proposed Voting Choices ===== | ===== Vote ===== |
Because this is a language change, a 2/3 majority is required. | Because this is a language change, a 2/3 majority is required. It is a simple yes/no vote on whether ''empty()'' should be made a variadic. |
| |
| <doodle title="Make empty() a Variadic" auth="tpunt" voteType="single" closed="true"> |
| * Yes |
| * No |
| </doodle> |
| |
| Voting starts on 2015-03-07 and ends on 2015-03-21. |
| |
===== Patches and Tests ===== | ===== Patches and Tests ===== |
| |
PR: https://github.com/php/php-src/pull/1109 | PR: https://github.com/php/php-src/pull/1109 |