rfc:get_class_disallow_null_parameter

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:get_class_disallow_null_parameter [2016/08/13 22:56] danackrfc:get_class_disallow_null_parameter [2018/03/01 23:26] (current) – RFC was implemented in PHP 7.2 carusogabriel
Line 1: Line 1:
 ====== PHP RFC: get_class() disallow null parameter ====== ====== PHP RFC: get_class() disallow null parameter ======
-  * Version: 0.9+  * Version: 1.0
   * Date: 2016-08-12   * Date: 2016-08-12
   * Author: Danack   * Author: Danack
-  * Status: Draft +  * Status: Implemented (in PHP 7.2)
   * First Published at: https://wiki.php.net/rfc/get_class_disallow_null_parameter   * First Published at: https://wiki.php.net/rfc/get_class_disallow_null_parameter
  
Line 26: Line 26:
  
 If $result contains null, the output will be of the class context where get_class() was called from, in this case "Foo". If $result contains null, the output will be of the class context where get_class() was called from, in this case "Foo".
 +
 +
 +This feature violates the [[https://en.wikipedia.org/wiki/Principle_of_least_astonishment|Principle of least astonishment]]: "if a necessary feature has a high astonishment factor, it may be necessary to redesign the feature."
 +
  
 ===== Proposal ===== ===== Proposal =====
  
-Disallow null being passed to the function as a valid parameter.+Disallow null being passed to the function as a valid parameter. If get_class() is called with null as the parameter, a warning will be emitted: 
 + 
 +<code> 
 +Warning: get_class() expects parameter 1 to be object, null given in %s on line %d 
 +</code>
  
 I.e. the valid ways to call the function will be: I.e. the valid ways to call the function will be:
Line 53: Line 61:
 <code php> <code php>
 if ($some_value_that_may_be_null === null) { if ($some_value_that_may_be_null === null) {
-    $x = null;+    $x = get_class();
 } }
 else { else {
Line 63: Line 71:
 7.2 7.2
  
-===== Proposed Voting Choices =====+===== Voting =====
  
-The voting question will be "Should the function be changed to disallow null being passed as a parameter?" with yes/no being the options. As it is not a language or syntax change, the vote will pass if 50%+1 vote yes.+Should the get_class() function be changed to disallow null being passed as a parameter? As it is not a language or syntax change, the vote will pass if 50%+1 vote yes.
  
-===== Patches and Tests =====+<doodle title="get_class() disallow null parameter" auth="Danack" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
-https://github.com/Danack/php-src/tree/get_class_rfc+Voting ended on the 8th October 2016 9pm UTC
  
-===== Implementation ===== +===== null vs default param =====
-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+
  
 +When this topic was discussed before, it came as a surprise to some people that PHP can tell the difference between passing null and having a default value be null. This is perfectly possible in both internal code, as well as userland code:
  
 +<code php>
 +function get_class($item = null)
 +{
 +    if (func_num_args() == 0) {
 +        return get_current_scope_name();
 +    }
 +    if ($item === null) {
 +        trigger_error("get_class passed null, which is not an object.");
 +    }
  
 +    if (is_object($item) == false) {
 +        trigger_error("value is not an object");
 +        return false;
 +    }
 +
 +    return gettype($item);
 +}
 +</code>
 +
 +
 +===== Patches and Tests =====
 +
 +https://github.com/php/php-src/pull/2082
 +
 +===== Implementation =====
 +After the project is implemented, this section should contain 
 +  - This was merged for PHP 7.2
 +  - https://github.com/php/php-src/pull/2082/commits/86aa1c784d3b584e6d0c235870a882c8fd169a74
 +  - https://secure.php.net/manual/en/function.get-class.php#refsect1-function.get-class-changelog
rfc/get_class_disallow_null_parameter.1471129016.txt.gz · Last modified: 2017/09/22 13:28 (external edit)