rfc:get_debug_type

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
rfc:get_debug_type [2020/02/17 09:42]
marandall
rfc:get_debug_type [2020/04/29 19:42]
ajf fix unclosed vote
Line 3: Line 3:
   * Date: 2020-02-15   * Date: 2020-02-15
   * Author: Mark Randall, marandall@php.net   * Author: Mark Randall, marandall@php.net
-  * Status: Under Discussion+  * Status: Accepted
   * First Published at: https://wiki.php.net/rfc/get_debug_type   * First Published at: https://wiki.php.net/rfc/get_debug_type
  
Line 9: Line 9:
 This RFC proposes to add a new function get_debug_type that will return the given type of a variable. This RFC proposes to add a new function get_debug_type that will return the given type of a variable.
  
-This function would differ from gettype in that it would return native type namese.g. "int" rather than "integer" and would automatically resolve class names.+This is to replace the following patternwhich may be used to generate debugging messages when dealing with types which cannot be handled by existing PHP runtime checking based on parameter types, such as those coming from an array.
  
-0 => int   +<code php> 
-0.1 => float   +$bar = $arr['key']; 
-true => bool   +if (!($bar instanceof Foo)) {  
-false => bool   +  // this shows the most simple of patterns, to get the real type an assoc array 
-"hello" => string   +  // must be present to convert long-form "integer" into int etc. 
-[] => array   +  throw new TypeError('Expected ' . Foo::class . ' got ' . (is_object($bar) ? get_class($bar) : gettype($bar))); 
-null => null   +
-A class with name "Foo\Bar" => foo\bar   + 
-An anonymous class => class@anonymous   +// would become 
-A resource => resource (xxx)   +if (!($bar instanceof Foo)) {  
-A closed resource => resource (closed)  +  throw new TypeError('Expected ' . Foo::class . ' got ' . get_debug_type($bar)); 
 +
 + 
 +$bar->someFooMethod(); 
 +</code> 
 + 
 +This function would differ from gettype in that it would return native type names, e.g. "int" rather than "integer" and would automatically resolve class names. The following table shows what ''get_debug_type()'' returns for different values, and what ''gettype()'' returns for the same value (if it is different): 
 + 
 +^ Value   ^ get_debug_type() ^ gettype() ^ 
 +| 0       | int | integer | 
 +0.1     | float | double | 
 +true    bool | boolean | 
 +false   | bool | boolean | 
 +"hello" string | | 
 +[]      array  | | 
 +null    null | NULL | 
 +A class with name "Foo\Bar" | Foo\Bar  | object | 
 +An anonymous class class@anonymous   | object | 
 +A resource         | resource (xxx)    | resource | 
 +A closed resource  resource (closed) | |
  
  
Line 31: Line 50:
 PHP 8.0 PHP 8.0
  
-===== Proposed Voting Choices ===== +===== Voting =====
-Yes / no vote on adding the new function. +
- +
-Yes / no on resource names be resolved - Would appear as resource(resource_type).+
  
-(Optional) A vote on the name, if there is not a clear majority consensus during RFC discussion.+<doodle title="Add get_debug_type as described" auth="marandall" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
  
rfc/get_debug_type.txt · Last modified: 2020/08/01 23:41 by carusogabriel