Hi all,
Following a long and fairly embarrassing exchange of views with one of my
php|architect authors, I finally discovered that
allow_call_time_pass_reference is still on by default in PHP_5_3 (d'oh).
This makes no sense to me because:
- it throws an E_DEPRECATED warning, which nobody will see during
development because
- it's a PHP_INI_SYSTEM|PHP_INI_PERDIR setting that is switched on by
default and
- on production sites, where it should be switched off, E_DEPRECATED is
fairly likely to go unreported
- we've been advising people to switch it off for over 8 years
Does anyone have a good reason for keeping it switched on by default in PHP
5.3? Like, would switching it off by default break a lot of existing code,
given that most users are a bit beyond PHP 3 now?
If not, there's a trivial patch attached for main.c and both php.ini-*
files.
As an aside, by-ref is actually faster than by-value under Windows in my
tests, for small amounts of data. That was what you might call an unexpected
result - it definitely isn't the case under *nix, or with very large arrays.
- Steph
Index: php.ini-dist
===================================================================
RCS file: /repository/php-src/php.ini-dist,v
retrieving revision 1.231.2.10.2.22.2.6
diff -u -r1.231.2.10.2.22.2.6 php.ini-dist
--- php.ini-dist 7 Apr 2008 21:24:04 -0000 1.231.2.10.2.22.2.6
+++ php.ini-dist 8 May 2008 18:45:44 -0000
@@ -164,12 +164,12 @@
; at function call time. This method is deprecated and is likely to be
; unsupported in future versions of PHP/Zend. The encouraged method of
; specifying which arguments should be passed by reference is in the function
-; declaration. You're encouraged to try and turn this option Off and make
+; declaration. You're encouraged to try and keep this option Off and make
; sure your scripts work properly with it in order to ensure they will work
; with future versions of the language (you will receive a warning each time
; you use this feature, and the argument will be passed by value instead of by
; reference).
-allow_call_time_pass_reference = On
+allow_call_time_pass_reference = Off
;
; Safe Mode
Index: php.ini-recommended
===================================================================
RCS file: /repository/php-src/php.ini-recommended,v
retrieving revision 1.179.2.11.2.23.2.6
diff -u -r1.179.2.11.2.23.2.6 php.ini-recommended
--- php.ini-recommended 7 Apr 2008 21:24:04 -0000 1.179.2.11.2.23.2.6
+++ php.ini-recommended 8 May 2008 18:46:09 -0000
@@ -104,10 +104,6 @@
; are emitted for non-critical errors, but that could be a symptom of a
bigger
; problem. Most notably, this will cause error messages about the use
; of uninitialized variables to be displayed.
-; - allow_call_time_pass_reference = Off [Code cleanliness]
-; It's not possible to decide to force a variable to be passed by reference
-; when calling a function. The PHP 4 style to do this is by making the
-; function require the relevant argument by reference.
; - short_open_tag = Off [Portability]
; Using short tags is discouraged when developing code meant for
redistribution
; since short tags may not be supported on the target server.
@@ -213,7 +209,7 @@
; at function call time. This method is deprecated and is likely to be
; unsupported in future versions of PHP/Zend. The encouraged method of
; specifying which arguments should be passed by reference is in the function
-; declaration. You're encouraged to try and turn this option Off and make
+; declaration. You're encouraged to try and keep this option Off and make
; sure your scripts work properly with it in order to ensure they will work
; with future versions of the language (you will receive a warning each time
; you use this feature, and the argument will be passed by value instead of by
Index: main/main.c
===================================================================
RCS file: /repository/php-src/main/main.c,v
retrieving revision 1.640.2.23.2.57.2.21
diff -u -r1.640.2.23.2.57.2.21 main.c
--- main/main.c 22 Mar 2008 12:56:16 -0000 1.640.2.23.2.57.2.21
+++ main/main.c 8 May 2008 18:46:21 -0000
@@ -370,7 +370,7 @@
PHP_INI_ENTRY_EX("highlight.keyword", HL_KEYWORD_COLOR,
PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
PHP_INI_ENTRY_EX("highlight.string", HL_STRING_COLOR,
PHP_INI_ALL, NULL, php_ini_color_displayer_cb)
- STD_PHP_INI_BOOLEAN("allow_call_time_pass_reference", "1",
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, allow_call_time_pass_reference,
zend_compiler_globals, compiler_globals)
+ STD_PHP_INI_BOOLEAN("allow_call_time_pass_reference", "0",
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, allow_call_time_pass_reference,
zend_compiler_globals, compiler_globals)
STD_PHP_INI_BOOLEAN("asp_tags", "0",
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, asp_tags,
zend_compiler_globals, compiler_globals)
STD_PHP_INI_ENTRY_EX("display_errors", "1",
PHP_INI_ALL, OnUpdateDisplayErrors, display_errors, php_core_globals,
core_globals, display_errors_mode)
STD_PHP_INI_BOOLEAN("display_startup_errors", "0", PHP_INI_ALL,
OnUpdateBool, display_startup_errors, php_core_globals, core_globals)
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php