rfc:get_class_disallow_null_parameter

Differences

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

Link to this comparison view

Next revision
Previous revision
rfc:get_class_disallow_null_parameter [2016/08/13 22:55] – created 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:
  
-called without any parameter. +  * without any parameter. 
-called with an object as the parameter.+  * with an object as the parameter.
  
 Those two options will continue to have the same behaviour they currently have. Those two options will continue to have the same behaviour they currently have.
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.1471128946.txt.gz · Last modified: 2017/09/22 13:28 (external edit)