PHP RFC: Introduce Type Affinity
PHP is weakly typed to make it work with Web smoothly. However, precise data type usage is more an more important in these days. Weakly typed does not mean typeless. SQLite2 was typeless, but SQLite3 became type aware by “Type Affinity” to achieve better performance.
SQLite3 stores data as native data type if input for the field is appropriate for field data type.
PHP may have type affinity for both better performance and code.
Since inputs are converted to native type.
- PHP does not have to convert ZVAL again and again. (e.g. “int” input is almost always treated as “int”)
- It works well with coercive type or strict type if PHP has it. (Not work well with currently proposed “strict_types”, though)
- User can omit simple data type validation and concentrate what data should like.
Introduce SQLite3 like type affinity for $_GET/$_POST/$_COOKIE/$_FILES/$_ENV/$_SERVER:
There are few possible ways.
- Detect possible data type without definition/hint
- Have INI option for type affinity conversion (When “On”, affinity conversion is done always for $_GET/$_POST/etc)
- Data is stored with native data type
- Conversion will never raise error
- Provide data type definition/hint prior to the conversion
- Apply type affinity function and convert (User must write code unlike previous one)
- If there is conversion error, it may raise error
Introduce type affinity conversion function:
- void type_affinitize(mixed &$input [, array $definition ]);
- void type_affinitize_input(string $input=“GPC” [, array $definition ]);
“GPC” is for $_GET/$_POST/$_COOKIE
Type affinity may be applied to any inputs including databases/$argv/etc.
Please suggest other ways/ideas. Thank you.
Backward Incompatible Changes
Inputs (e.g. $_GET/etc) has string data typed always currently. Type affinity introduce native type for inputs.
Proposed PHP Version(s)
To Existing Extensions
If there are any php.ini settings then list:
- hardcoded default values
- php.ini-development values
- php.ini-production values
Make sure there are no open issues when the vote starts!
Unaffected PHP Functionality
Type affinity can increase usefulness of strict data typing.
Proposed Voting Choices
Include these so readers know where you are heading and can discuss the proposed voting options.
State whether this project requires a 2/3 or 50%+1 majority (see voting)
Patches and Tests
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
Links to external references, discussions or RFCs
- This RFC related to “type hint” RFCs.
Keep this updated with features that were discussed on the mail lists.