rfc:scalar_type_hints_v5

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
rfc:scalar_type_hints_v5 [2015/02/20 23:27]
ircmaxell Target 7.next OR 8.0
rfc:scalar_type_hints_v5 [2018/10/17 11:38] (current)
carusogabriel Fix table align in "bool" column
Line 1: Line 1:
 ====== PHP RFC: Scalar Type Declarations ====== ====== PHP RFC: Scalar Type Declarations ======
-  * Version: 0.5.2+  * Version: 0.5.3
   * Date: 2015-02-18   * Date: 2015-02-18
   * Author: Anthony Ferrara <ircmaxell@php.net> (original Andrea Faulds, ajf@ajf.me)   * Author: Anthony Ferrara <ircmaxell@php.net> (original Andrea Faulds, ajf@ajf.me)
-  * Status: Discussion+  * Status: Implemented
   * First Published at: http://wiki.php.net/rfc/scalar_type_hints_v5   * First Published at: http://wiki.php.net/rfc/scalar_type_hints_v5
   * Forked From: http://wiki.php.net/rfc/scalar_type_hints   * Forked From: http://wiki.php.net/rfc/scalar_type_hints
Line 125: Line 125:
 The table shows which types are accepted and converted for scalar type declarations. ''NULL'', arrays and resources are never accepted for scalar type declarations, and so are not included in the table. The table shows which types are accepted and converted for scalar type declarations. ''NULL'', arrays and resources are never accepted for scalar type declarations, and so are not included in the table.
  
-^ Type declaration  ^ int  ^ float    ^ string   ^ bool ^ object +^ Type declaration  ^ int  ^ float    ^ string   ^ bool  ^ object 
-^ ''int''           ^ yes  ^ yes*     ^ yes†     ^ yes  ^ no      ^ +^ ''int''           ^ yes  ^ yes*     ^ yes†     ^ yes   ^ no      ^ 
-^ ''float''         ^ yes  ^ yes      ^ yes†     ^ yes  ^ no      ^ +^ ''float''         ^ yes  ^ yes      ^ yes†     ^ yes   ^ no      ^ 
-^ ''string''        ^ yes  ^ yes      ^ yes      ^ yes  ^ yes‡    ^ +^ ''string''        ^ yes  ^ yes      ^ yes      ^ yes   ^ yes‡    ^ 
-^ ''bool''          ^ yes  ^ yes      ^ yes      ^ yes  ^ no      ^+^ ''bool''          ^ yes  ^ yes      ^ yes      ^ yes   ^ no      ^
  
 <nowiki>*</nowiki>Only non-NaN floats between ''PHP_INT_MIN'' and ''PHP_INT_MAX'' accepted. (New in PHP 7, see the [[rfc:zpp_fail_on_overflow|ZPP Failure on Overflow]] RFC) <nowiki>*</nowiki>Only non-NaN floats between ''PHP_INT_MIN'' and ''PHP_INT_MAX'' accepted. (New in PHP 7, see the [[rfc:zpp_fail_on_overflow|ZPP Failure on Overflow]] RFC)
Line 161: Line 161:
  
 No other conversions are allowed. No other conversions are allowed.
 +
 +==== Error Handler Behavior In Strict Mode ====
 +
 +Currently it's possible to bypass error check failures using an error handler:
 +
 +<file php error_handler_fail.php>
 +<?php
 +declare(strict_types=1);
 +set_error_handler(function() {
 +    return true;
 +});
 +
 +function foo(int $abc) {
 +    var_dump($abc);
 +}
 +foo("test"); // string(4) "test"
 +?>
 +</file>
 +
 +This would defeat the purpose of strict typing. 
 +
 +Therefore, this RFC proposes to bypass function execution in strict mode if there's a type mismatch error (just like internal functions do today). The implementation is not complete, as this behavior would be superseded by [[rfc:engine_exceptions]] if it passed. Therefore the implementation will wait for the completion of voting on that RFC.
 +
  
 ===== Example ===== ===== Example =====
Line 657: Line 680:
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
  
-If the scalar type names are reserved for 7.0 (pending outcome of [[rfc:reserve_more_types_in_php_7]]), this RFC will target 7.1. Otherwise it will target 8.0.+This proposal targets the 7.0 release of PHP.
  
 ===== RFC Impact ===== ===== RFC Impact =====
Line 680: Line 703:
  
 As this is a language change, this RFC requires a 2/3 majority to pass. As this is a language change, this RFC requires a 2/3 majority to pass.
 +
 +<doodle title="Accept Scalar Type Declarations With Optional Strict Mode?" auth="ircmaxell" voteType="single" closed="true">
 +   * Yes
 +   * No
 +</doodle>
 +
 +This vote is opened on February 26th, 2015 and will close March 16th at 21:00 UTC as announced on list.
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
Line 701: Line 731:
 ===== Changelog ===== ===== Changelog =====
  
 +  * v0.5.3 Change version target back and add line about bypassing function execution on type error in strict mode
   * v0.5.2 Change version target   * v0.5.2 Change version target
   * v0.5.1 Remove aliases from proposal   * v0.5.1 Remove aliases from proposal
   * v0.5 Fork from Andrea's original proposal. Change declare behavior. Add int->float (primitive type widening).   * v0.5 Fork from Andrea's original proposal. Change declare behavior. Add int->float (primitive type widening).
rfc/scalar_type_hints_v5.1424474870.txt.gz · Last modified: 2017/09/22 13:28 (external edit)