rfc:tostring_exceptions

Differences

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

Link to this comparison view

Next revision
Previous revision
rfc:tostring_exceptions [2019/04/30 12:45]
nikic created
rfc:tostring_exceptions [2019/06/14 12:12] (current)
theodorejb Change status to implemented
Line 2: Line 2:
   * Date: 2019-04-30   * Date: 2019-04-30
   * Author: Nikita Popov <​nikic@php.net>​   * Author: Nikita Popov <​nikic@php.net>​
-  * Status: ​Draft+  * Status: ​Implemented (in PHP 7.4)
   * Target Version: PHP 7.4   * Target Version: PHP 7.4
   * Implementation:​ https://​github.com/​php/​php-src/​pull/​3887   * Implementation:​ https://​github.com/​php/​php-src/​pull/​3887
Line 9: Line 9:
  
 Throwing exceptions from ''​%%__toString()%%''​ is currently forbidden and will result in a fatal error. Throwing exceptions from ''​%%__toString()%%''​ is currently forbidden and will result in a fatal error.
-This makes it dangerous to call arbirary ​code inside ''​%%__toString()%%''​ and makes it'​s ​use as a+This makes it dangerous to call arbitrary ​code inside ''​%%__toString()%%''​ and makes its use as a
 general API problematic. This RFC aims to remove this restriction. general API problematic. This RFC aims to remove this restriction.
  
 The rationale for the current behavior is that string conversions are performed in many places The rationale for the current behavior is that string conversions are performed in many places
-through ​the engine and standard library, and not all places are prepared to deal with exceptions+throughout ​the engine and standard library, and not all places are prepared to deal with exceptions
 "​correctly",​ in the sense that the exception is handled as early as possible. "​correctly",​ in the sense that the exception is handled as early as possible.
  
 This limitation is ultimately futile from a technical perspective,​ because exceptions during This limitation is ultimately futile from a technical perspective,​ because exceptions during
-string conversion can still be triggered by error handler that convert warnings ​to exception:+string conversion can still be triggered by an error handler that converts recoverable errors ​to exceptions:
  
 <PHP> <PHP>
Line 31: Line 31:
 </​PHP>​ </​PHP>​
  
-However, the sentiment in past discussions on this topic has been to not relax this restriction +In fact, Symfony [[https://​github.com/​symfony/​symfony/​blob/​1c110fa1f7e3e9f5daba73ad52d9f7e843a7b3ff/​src/​Symfony/​Component/​Debug/​ErrorHandler.php#​L457-L489|uses this loophole]] to work around the current limitation. Unfortunately this relies on the ''​$errcontext''​ parameter, which is going away in PHP 8. 
-until we have performed a more comprehensive audit of string conversions across the codebase. This + 
-has been done in the attached implementation pull request.+Despite this, the sentiment in past discussions on this topic has been to not relax this restriction 
 +until we have performed a comprehensive audit of string conversions across the codebase. This 
 +has been done in the attached implementation ​[[https://​github.com/​php/​php-src/​pull/​3887|pull request]].
  
 ===== Proposal ===== ===== Proposal =====
Line 81: Line 83:
  
  
-// Like convert_to_string() but returns a boolean ​indication ​conversion success.+// Like convert_to_string() but returns a boolean ​indicating ​conversion success/failure.
 if (!try_convert_to_string(val)) { if (!try_convert_to_string(val)) {
     // Possibly free other resources here.     // Possibly free other resources here.
Line 97: Line 99:
 ===== Vote ===== ===== Vote =====
  
-Allow exceptions from ''​%%__toString()%%'' ​in PHP 7.4? Yes/No.+Voting started 2019-05-22 and ends 2019-06-05. 
 + 
 +<doodle title="​Allow exceptions from __toString() in PHP 7.4?" auth="​nikic"​ voteType="​single"​ closed="​true">​ 
 +   ​* ​Yes 
 +   ​* ​No 
 +</​doodle>​
  
rfc/tostring_exceptions.1556628354.txt.gz · Last modified: 2019/04/30 12:45 by nikic