PHP RFC: Deprecate INI set/get aliases
- Version: 0.1
- Date: 2015-01-31
- Author: Yasuo Ohgaki yohgaki@ohgaki.net
- Status: Under Discussion
- First Published at: http://wiki.php.net/rfc/deprecate_ini_set_get_aliases
Introduction
There are number of INI set/get functions. This RFC proposes deprecation of these functions.
Use of ini_set()/ini_get() simplifies/improves/cleanups PHP. Some of these alias function names is inconsistent, some aliases are missing while similar INI setting may be set/get by aliases. Simple INI set/get alias functions are just making PHP complex, creating more inconsistencies. PHP needs no more INI set/get aliases at least, document use of ini_get()/ini_set() in the CODING_STANDARDS.
Pros
- Less API, hence simpler API.
- Modules will be less buggy. i.e. PHP_INI_MH() must handle “state” properly, but it tends to be forgotten, 3rd party modules especially. Even our module changes INI setting invisible/inconsistent way. e.g. mb_http_input()
- Consistent coding style/API across modules, both internal and script.
- Reduced documentations. INI descriptions are only in INI section.
- Less documentations, hence less documentation bugs.
- Better documentation. All user needs to know will be in INI section.
- Awareness of INI setting use. Users are better to know they are using INI. i.e. All INI values has the same limitations, INI_SYSTEM/INI_PERDIR/INI_USER, stage limitations if any.
- (Please point it out more advantages)
Cons
- Existing code modifications. (It's E_DEPRECATED. User may ignore.)
- (Please point it out more disadvantages)
Before
<?php // Setup environment session_cache_limiter('public'); session_name('MYSESS'); session_save_path('/var/php/session'); ini_set('session.cache_expire', 10); ini_set('max_execution_time', 15); ini_set('display_errors', 'Off'); ini_set('default_charset', 'UTF-8'); mb_internal_encoding('UTF-8'); date_default_time_zone_set('Asia/Tokyo');
After
<?php // Setup environment ini_set('session.cache_limiter', 'public'); ini_set('session.name', 'MYSESS'); ini_set('session.save_path', '/var/php/session'); ini_set('session.cache_expire', 10); ini_set('max_execution_time', 15); ini_set('display_errors', 'Off'); ini_set('default_charset', 'UTF-8'); ini_set('mbstring.internal_encoding', 'UTF-8'); ini_set('date.timezone','Asia/Tokyo');
From pre RFC discussion:
removing or disrupting functions without a very good reason (such as, functionality going away or this function is abused or is broken in many use cases) is wrong. These functions don't seem broken, they just do something that you can do in another way. I don't think it is necessary to deprecated them. (Stas)
Proposal
There are 2 documentation and 1 code change proposal.
1. Add plain ini_get/set() usage in CODING_STANDARDS. In the “Code Implementation” session add following standard.
10. Use ini_set()/ini_get() function when modules need to change INI values. Do not add simple ini_set()/ini_get() alias functions.
2. Document INI set/get alias functions in the PHP Manual.
e.g.
- And more.
3. Add E_DEPRICATED errors for INI set/get alias functions.
Exceptions: These are not simple INI set/get aliases.
- http://php.net/manual/en/function.session-set-save-handler.php Required to resigt callbacks.
- http://php.net/manual/en/datetime.gettimezone.php Class method.
- http://php.net/manual/en/datetime.settimezone.php Class method.
- http://php.net/manual/en/function.assert-options.php Required to regist callbacks.
Backward Incompatible Changes
1. None for CODING_STANDARD documentation.
2. None for deprecation documentation in the PHP manual.
3. E_DEPRECATED error may be ignored
Proposed PHP Version(s)
- PHP 7.0
RFC Impact
To SAPIs
No SAPI impact.
To Existing Extensions
Modules that has INI set/get aliases are affected.
- standard
- session
- mbstring
- iconv
- (and more)
To Opcache
No Opcache impact.
New Constants
No constant.
php.ini Defaults
No changes for INI values.
- hardcoded default values
- php.ini-development values
- php.ini-production values
Open Issues
Decided exceptions. Candidates are
- Zend/Core functions that changes INI. e.g. gc_enable.
E_DEPRECATED errors may be delayed until PHP 7.1
Unaffected PHP Functionality
Functions that are not simple INI set/get aliases are not affected.
Future Scope
- If proposal 3 (Add E_DEPRECATE error) is rejected, adding E_DEPRECATE error will be future decision.
- All INI values in the manual should be able to be easily searchable.
Proposed Voting Choices
Proposals require 50%+1 majority
Patches and Tests
No patch is prepared as this is a trivial change.
Implementation
After the project is implemented, this section should contain
- the version(s) it was merged to
- a link to the git commit(s)
- a link to the PHP manual entry for the feature