Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
rfc:variadic_empty [2015/03/07 11:25] – tpunt | rfc:variadic_empty [2015/03/21 12:35] – tpunt |
---|
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'] ) ) |
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. It is a simple yes/no vote on whether ''empty()'' should be made a variadic. | 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="false"> | <doodle title="Make empty() a Variadic" auth="tpunt" voteType="single" closed="true"> |
* Yes | * Yes |
* No | * No |
</doodle> | </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 |