rfc:deprecate_ini_set_get_aliases

PHP 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

  1. Less API, hence simpler API.
  2. 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()
  3. Consistent coding style/API across modules, both internal and script.
  4. Reduced documentations. INI descriptions are only in INI section.
  5. Less documentations, hence less documentation bugs.
  6. Better documentation. All user needs to know will be in INI section.
  7. 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.
  8. (Please point it out more advantages)

Cons

  1. Existing code modifications. (It's E_DEPRECATED. User may ignore.)
  2. (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.

  1. And more.

3. Add E_DEPRICATED errors for INI set/get alias functions.

Exceptions: These are not simple INI set/get aliases.

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)

  1. PHP 7.0

RFC Impact

To SAPIs

No SAPI impact.

To Existing Extensions

Modules that has INI set/get aliases are affected.

  1. standard
  2. session
  3. mbstring
  4. iconv
  5. (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

  1. 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

  1. the version(s) it was merged to
  2. a link to the git commit(s)
  3. a link to the PHP manual entry for the feature

References

Rejected Features

rfc/deprecate_ini_set_get_aliases.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1