rfc:calltimebyref

Differences

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

Link to this comparison view

Next revision
Previous revision
rfc:calltimebyref [2008/05/21 13:02]
sfox created
rfc:calltimebyref [2017/09/22 13:28] (current)
Line 1: Line 1:
-====== Request for Comments: ​How to write RFCs ======+====== Request for Comments: ​allow_call_time_pass_reference ​======
   * Version: 1.0   * Version: 1.0
   * Date: 2008-05-21   * Date: 2008-05-21
   * Author: Steph Fox <​sfox@php.net>​   * Author: Steph Fox <​sfox@php.net>​
-  * Status: ​Under Discussion+  * Status: ​Implemented
   * First Published at: http://​wiki.php.net/​rfc/​calltimebyref   * First Published at: http://​wiki.php.net/​rfc/​calltimebyref
  
Line 9: Line 9:
  
 This RFC aims to clarify the situation with call-time pass-by-ref in PHP 5.3. This RFC aims to clarify the situation with call-time pass-by-ref in PHP 5.3.
 +
 +
  
 ===== History ===== ===== History =====
Line 14: Line 16:
 Before PHP 4.0 was released, ''​allow_call_time_pass_reference''​ was introduced as a means of retaining back compatibility with PHP 3, at the point where returning by reference from a function declaration became possible [1]. By default, the INI switch has been On since inception [2]. The warning (formerly ''​E_COMPILE_WARNING''​ but currently ''​E_DEPRECATED''​) is only thrown if the INI switch is Off. You therefore need to **explicitly** switch off the directive in order to discover that the behaviour is deprecated. Before PHP 4.0 was released, ''​allow_call_time_pass_reference''​ was introduced as a means of retaining back compatibility with PHP 3, at the point where returning by reference from a function declaration became possible [1]. By default, the INI switch has been On since inception [2]. The warning (formerly ''​E_COMPILE_WARNING''​ but currently ''​E_DEPRECATED''​) is only thrown if the INI switch is Off. You therefore need to **explicitly** switch off the directive in order to discover that the behaviour is deprecated.
  
-At the time ''​allow_call_time_pass_reference''​ was introduced, php.ini-recommended was interestingly referred to as '​php.ini-optimized'​. Over the years, it has become fairly standard to regard php.ini-recommended as '​production settings';​ things like ''​display_errors=Off''​ and ''​log_errors=On''​ have helped this perception along. For the last 8 years, therefore, the first anyone is likely to have known about their code being less than kosher is when it went live.+At the time ''​allow_call_time_pass_reference''​ was introduced, php.ini-recommended was interestingly referred to as '​php.ini-optimized'​. Over the years, it has become fairly standard to regard php.ini-recommended as '​production settings';​ things like ''​display_errors=Off''​ and ''​log_errors=On''​ have helped this perception along. From inception, ''​allow_call_time_pass_reference''​ was switched ''​Off''​ in php.ini-recommended but ''​On''​ in php.ini-dist and by default. For the last 8 years, therefore, the first anyone is likely to have known about their code being less than kosher is when it went live.
  
 Even in the current php.ini-recommended,​ the switch is attributed only to 'Code cleanliness'​. The full entry in the heading about changed settings reads: Even in the current php.ini-recommended,​ the switch is attributed only to 'Code cleanliness'​. The full entry in the heading about changed settings reads:
  
 +<​code>​
 ; - allow_call_time_pass_reference = Off     [Code cleanliness] ; - allow_call_time_pass_reference = Off     [Code cleanliness]
 ;     ​It'​s not possible to decide to force a variable to be passed by reference ;     ​It'​s not possible to decide to force a variable to be passed by reference
 ;     when calling a function. ​ The PHP 4 [sic] style to do this is by making the ;     when calling a function. ​ The PHP 4 [sic] style to do this is by making the
 ;     ​function require the relevant argument by reference. ;     ​function require the relevant argument by reference.
 +</​code>​
 +
 +In fact, allowing values to be passed by reference is the default behaviour in PHP, and has been from PHP 4.0 beta right up to PHP 5.3.
  
-In fact, allowing return values by reference is the default behaviour in PHP, and has been from PHP 4.0 beta right up to PHP 5.3. 
  
 ===== Reality Check ===== ===== Reality Check =====
  
-In some circumstances,​ on some platforms, ​returning ​values by reference can actually speed up your code. In most cases, though - and for all when it comes to large arrays - it carries a performance penalty. If you make use of by-ref for performance reasons on a given platform, that optimization will not be portable.+In some circumstances,​ on some platforms, ​passing ​values by reference can actually speed up your code. In most cases, though - and for all when it comes to large arrays - it carries a performance penalty. If you make use of by-ref for performance reasons on a given platform, that optimization will not be portable. 
  
 ===== Future ===== ===== Future =====
  
-The directive is completely gone from CVS HEAD [3]. The effect of this originally was that a new-to-many ''​E_STRICT''​ would be thrown when values are returned ​by reference. However, it's been moved to ''​E_DEPRECATED''​ recently. In either case, it will no longer be possible to turn the warning off.+The directive is completely gone from CVS HEAD [3]. The effect of this originally was that a new-to-many ''​E_STRICT''​ would be thrown when values are passed ​by reference. However, it's been moved to ''​E_DEPRECATED''​ recently. In either case, it will no longer be possible to turn the warning off.
  
 ===== Proposal ===== ===== Proposal =====
Line 45: Line 51:
   - [3] [[http://​cvs.php.net/​viewvc.cgi/​php-src/​main/​main.c?​r1=1.676&​r2=1.677]]   - [3] [[http://​cvs.php.net/​viewvc.cgi/​php-src/​main/​main.c?​r1=1.676&​r2=1.677]]
  
- +==== Comments ==== 
 +currently allow_call_time_pass_reference is set to Off in both php.ini-production and php.ini-development for 5.3, and Call-time pass-by-reference was removed from 5.4, so this RFC is implemented/​obsolete.
rfc/calltimebyref.1211374968.txt.gz · Last modified: 2017/09/22 13:28 (external edit)