Request for Comments
This page gives an overview of the current RFCs for PHP.
To create a new RFC, see How To Create an RFC.
Note: An RFC is effectively “owned” by the person that created it. If you want to make changes, get permission from the creator. If no agreement can be found, the only course of action is to create a competing RFC. In this case the old RFC page should be modified to become an intermediate page that points to all the competing RFC's.
A new page in this RFC namespace will automatically be loaded with an RFC template. Customize as needed.
In voting phase
This section is for RFCs that have been announced on the PHP “internals” mail list.
- Secure Session Options
This RFC proposes secure options for session module as default (Vote period: 2014/02/14 - 2014/02/21) (Created: 2014/02/01)
- Unify crypto source INI setting
This RFC proposes unified crypto source settings. (Created 2014/02/13)
- Make PHP open tag optional for better security
This RFC proposes option (php.ini and CLI opts) for removing PHP tags (<?php and so forth) from PHP scripts.(Vote period: 2014/02/16 - 2014/02/22) (Created 2012/04/12)
- Build OpenSSL module by default
This RFC proposes building openssl module by default.
- Module API introspection
Developer/Operations command-line API for checking module versions (Created 2014/01/24)
- Normalizing increment and decrement operators
This RFC proposes to make ++ and – operators to work more intuitively. (Created 2013-12-19)
This RFC proposes adding a modern Expectation/Assertion API. (Created 2013/11/01)
- Secure session_regenerate_id()
Make session_regenerate_id() more secure. (Created 2013/10/29 )
- list() Reference Assignment
This RFC proposes a new syntax to enable reference assignment with list(). (Created 2013/10/25)
- Named Parameters
This RFC proposes introducing named parameters. (Created 2013/09/06)
- Internal Serialize API
This RFC proposes API for internal generating of serialization. (Created 2013/07/27)
- security improvement for unserialize()
Add option to ignore all or some objects to unserialize() (Created 2013/03/30)
- unset(): return bool if the variable has existed
Add to unset a return value if the deletion was successful (Created 2013/03/06)
- Integrate voting polls in PHP.net
This RFC talks about integration of voting polls into PHP.net (Created 2013/02/23)
- Skipping optional parameters
Skipping optional parameters in function calls (Created 2012/04/13)
- Escaping RFC for PHP Core
Implementing a core anti-XSS escaping class and possibly functions for the more procedurally inclined programmers. (Created 2012/09/18)
- Moving to an AST-based parsing/compilation process
Proposes to improve the current parsing/compilation process by introducing an AST as an intermediary structure (Created 2012/09/04)
- Keeping the tests green
This RFC proposes a policy for keeping PHP CI tests green.
This section is for early drafts of RFCs that have NOT been announced on the PHP “internals” mail list.
- Normalize string bitwise shifts
Bitwise shifts to operate on string bytes instead of casting to integer.
- Type-hinting for return values
Adds optional type-hinting for return values.
- Adopt GC best practice
Session is center of web security. However, current session GC cannot be called best practice. Adopt GC best practice.
- Deprecate function that modify INI
There are number of functions that modify INI value. Let them deprecate and use ini_get()/ini_set().
- 64 bit platform improvements for string length and integer
Integer and String modifications for full 64 bit support
- Removal of dead SAPIs
Consideration about the unsupported SAPIs removal.
- Consistent names for legacy functions/classes
This RFC proposes to use alias to provide both legacy and consistent names.
- Inconsistent behaviors
This RFC is to discuss/document inconsistent behaviors.
- Platform and extension-independent API to the system CSPRNG
Request for Comments: Platform and extension-independent API to the system CSPRNG.
- Loop+Else control structure
This RFC proposes an optional “else” clause that can be used after while, for, and foreach loops.
- Who can vote?
Define the participants of the voting process.
- Define PHP 5.3 end of life
The purpose of this RFC is to define when the PHP 5.3 series will no longer be supported.
- APXS LoadModule
This RFC proposes the addition of an option to the configure script that allows the user to specify whether the main Apache .conf file should be appended with the LoadModule entry.
- DateTime and Daylight Saving Time Transitions
Defines expected behaviors and new features to improve how DateTime handles Daylight Saving Time transitions.
- Release Process
PHP release process.
- Voting Process
PHP voting process.
- Magic Quotes
This RFC proposes how we deal with magic quotes from PHP 5.3.0 to 6.0.0.
- Choosing a distributed version control system for PHP
This RFC proposes to migrate the PHP SVN repo to a DVCS.
- PHP Version Control System
This RFC discusses the switch from CVS to some other version tracking system
Order in these sections: Language changes first, library changes later.
- Timing attack safe string comparison function
New function to perform time-constant string comparison (Created 2013/12/22)
- Introduce session_start() options - read_only, lazy_write, unsafe_lock and lazy_destory
Introduce session_start() options that enable/disable read_only, lazy_destroy, lazy_write, unsafe_lock that minimizes session data locking during a script execution. (Created 2014/01/20) (Proposal 1 only)
- __debugInfo() magic method
Support get_debug_info hook for userspace classes
- Exponential operator
- Importing namespaced functions
Proposes to allow importing namespaced functions through a new `use function` sequence.
- Constant Scalar Expressions (with constants)
This RFC proposes adding support for Constant Scalar Expressions with support for constants being operands.
- Remove calls from incompatible context
Calls from incompatible context deprecated in 5.6 (will be removed in next version).
- Dedicated syntax for variadic functions
This RFC introduces a dedicated syntax for variadic functions.
- Argument unpacking
This RFC proposes a syntax for argument unpacking.
- Internal operator overloading and GMP improvements
Add support for operator overloading in internal classes and improve GMP using it
Distribute phpdbg with PHP, a PHP debugger
- Slim POST data
Use a temp PHP stream for HTTP payload.
- Crypt() function salt
This RFC proposes changing crypt() function's salt parameter treatment.
- Apparmor change_hat functionality for php-fpm
Proposes to add the possibility to change to a different hat under the apparmor LSM
- TLS Peer Verification
Enable peer verification by default for encrypted client streams.
- Improved TLS Defaults
Implement more secure defaults for encrypted stream transfers
- Default character encoding
Default character encoding handling in PHP.
This RFC proposes adding generators as a simple and boilerplate-free way of defining iterators.
- support finally keyword
Add try catch finally supporting
- Resolve class names to scalars via class keyword
A proposal to use ::class after type names to resolve FQ class names as scalar
- foreach_variable supporting T_LIST
This extends PHP's language parser to support T_LIST in foreach_variable
- Const array/string dereference
A little improvement to make things consistent
- Allow arbitrary expression arguments to empty() and isset()
Proposes to allow
- Integrating Optimizer+ into the PHP distribution
This RFC proposes to integrate the Zend Optimizer+ opcode cache into the PHP distribution
- Adding hash_pbkdf2 function
This RFC proposes adding a hash_pbkdf2 function to the hash package
- Add Simplified Password Hashing
This RFC proposes adding 3 new functions to the core to expose a much simplified password hashing API.
- Remove preg_replace /e modifier
This RFC aims at deprecating and subsequently removing the /e modifier (PREG_REPLACE_EVAL) that preg_replace provides.
- Add UConverter
A proposal to add ICU::UConverter functionality to ext/intl
- ext/mysql deprecation
Formally deprecating ext/mysql in PHP.
- Cookie Max-Age attribute
Cookie Max-Age attribute
- Fix cURL file uploading API
Fix insecure cURL file uploading API
- Add recvmsg() and sendmsg() to ext/sockets
Wrap sendmsg() and recvmsg(), with support for a limited number of message types
- PHP CLI changing process title support
Setting PHP CLI process titles for visibility in 'top' or 'ps'
- Allow non-scalar keys in foreach
This RFC proposes to remove the type restrictions on foreach iteration
- Add array_column() function
This RFC proposes a new array function that returns the values of the specified column from a multi-dimensional array.
- Removal of curl-wrappers
This RFC is about removing the curl stream wrappers of the PHP as of 5.5 and to move it on PECL for any eventual improvements.
- Strict Sessions
This RFC proposes an additional security measure for preventing session fixation.
Note: Many RFCs in this list have been mass voted.
- Instantiating a class and calling methods/accessing properties on same command
A proposal to add support to instantiating a class and calling its methods or accessing its properties on same command.
Traits is a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. This RFC proposes a basic version of Traits.
- Closures: Object Extension
How to extend closures to work with $this and objects.
- Short syntax for arrays
This RFC will discuss an language enhancement for simple and easy array definition.
- Function array dereferencing
You know, like foo()['bar']
- Short tags in templates
This RFC discusses ways to enable short tags template syntax in a way that would be easy for users and compatible with XML users' requirements.
- Indirect method call by array variable
$arr = array('Class', 'method'); $arr();
- Supporting Binary Notation for Integers
This extends PHP's syntax to support binary notation for integers just as it already does for decimal, octal, and hexadecimal representations.
- Built-in web server
This RFC discusses the web server that is built into PHP itself, for development purpose.
- Removal of deprecated features
RFC about removing legacy features in the next version of PHP
- Improve parser error messages
Improve parser error message readability.
- Session upload progress
Using sessions to provide upload progress feedback to users.
- Object oriented session handlers
A proposal to allow session_set_save_handler() to accept an object, and expose the original session handler.
- Allow Multiple Simultaneous Syslog Connections
This RFC propose enhancement to syslog function in order to allow multiple simultaneous connections by using resources.
- Stream meta-data
RFC defines handler for setting metadata on stream URL.
- Error message formatting for development
This RFC discusses error message formatting to aid developers.
- Zend Engine Performance Improvements
Proposes Zend Engine changes which together make up to 20% performance improvement on synthetic benchmarks and some real-life applications
- Run Time Cache
offers an implementation of run-time caching technique which may improve performance of repeatable code
- Zend Signal Handling
Improve stability and speed when running under any forking SAPI by adding deferred signal handling to the Zend Engine.
- DTrace Probes for PHP
Provide DTrace probes for PHP.
- New Output API
An RFC about the New Output API
- Callable type hint
Callable type hint
- LDAP: Add ldap_modify_batch
This RFC proposes adding a lower-level modification function to the LDAP extension.
This RFC proposes Closures and lambda functions for PHP.
- HEREDOC with double quotes
This RFC is about allowing double quote syntax similar to single-quotes in NOWDOC as a HEREDOC syntax variant (in PHP 5.3)
- LSB parent::/self:: forwarding
Changes how parent:: and self:: work with LSB by making them forwarding.
This RFC proposes that call_time_pass_by_reference be switched off by default in PHP 5.3.
- New error level E_USER_DEPRECATED
This RFC proposes to introduce a new userspace error level similar to E_DEPRECATED for user level deprecation warnings
- Rounding in PHP
Make round() produce predictable results on all platforms and fix some problems in the process.
- Alternative to include/require for autoloaders
This RFC aims to offer an alternative solution to the well known fopen() “hack” used in autoloaders in order to verify the existence of files inside the include path
- FPM SAPI
This RFC discusses FPM SAPI and its inclusion to the core PHP distribution.
- FPM INI syntax
This RDV discusses the replacement of FPM configuration file from XML to INI.
- New INI Files
A proposal for two new INI files which will replace the current INI's packaged with PHP. One focused on production deployments and the other focused on development deployments.
- count_elements handler vs count()
Internal change to allow some optimization and add consistency.
- Array Of
Proposed syntax for Type-Hinting against the contents or an array (Created 2014/01/15)
- Improve HTML escape
This RFC proposes more secure HTML escape by escaping ”/” (Vote period: 2014/02/16 - 2014/02/22) (Created 2014/02/02)
- Multibyte Char Handling
This RFC proposes the way to handle multibyte chars. (Created 2014/01/16)
- Alternative mbstring implementation using ICU
A proposal to completely rewrite mbstring extension with ICU. (Created 2011/04/06)
- 64 bit platform improvements for string length and integer
Integer and String modifications for full 64 bit support
- Alphanumeric Decrement
This will add support for decrementing alphanumeric strings (“ab”, for example) to complement the existing incrementing behaviour. (Created 2013/12/16)
- Exceptions in the engine
This RFC proposes to allow the use of exceptions in the engine. (Postponed to PHP 6.)
- Extended keyword support
This RFC proposes to widen keyword support.
- Anonymous Class Support
This RFC proposes support for anonymous classes.
- Class instances counter
This RFC proposes a new function returning a list with class names and their instance counter.
Allow a trailing comma in function calls, similar to array declarations
- Add an array_part() function
Adds a function to extract multi-dimensional slices
Merge implementation of first proposal of PHP Standards Recommendation (PSR) into SPL core
Class Metadata feature (aka Annotations) support in PHP
- ifsetor() Operator
This RFC proposes an operator that efficiently implements (isset($foo) ? $foo : $bar) as ifsetor($foo, $bar)
- Non-breakable Traits
This RFC is a extension to the basic proposal. It includes the notion of trait-local methods and properties.
- Function getEntropy
Feature request for a new userspace function providing a truly random value.
- Property Accessors Syntax
RFC for the addition of C#-style get/set accessors to PHP
- Alternative typehinting syntax for accessors
Proposes an improved typehinting syntax for the accessors proposal.
- Automatic Property Initialization
This RFC proposes automatic assignments of constructor arguments to properties. (Created 2013/09/27)
- Make GMP number work like PHP number
Make compatible PHP number
- Constant Scalar Expressions (re-opening)
This RFC proposes adding support for Constant Scalar Expressions.
- Add scalar type hinting with casts
This RFC proposes adding scalar type hinting with casting to provide more robust parameter hinting.
- Function Autoloading
This RFC proposes to refactor the existing autoloading mechanism to support function and constant autoloading.
- Structural Type Hinting
This RFC proposes a new type-hint format to allow run-time checking of Structural Types.
- Constant Scalar Expressions
This RFC proposes adding support for Constant Scalar Expressions.
- Modify tempnam() to handle directories and auto-cleanup
Add TEMPNAM_DIR and TEMPNAM_REQUEST options to tempnam()
- Parameter Type Casting Hints
This RFC proposes adding type casting hints to function declarations.
- Magic Quotes in PHP, the Finalé
A safe, orderly manner for getting rid of Magic Quotes.
- Return value type hint
Return type hinting
A proposal to add a Comparable interface for userspace object comparisons.
- Cast and Assign Magic Methods
Feature request to expose object_cast, get and set to PHP land code via two new magic methods
- Add mysqlnd.localhost_override option
This RFC proposes to add mysqlnd.localhost_override to more easily override localhost when connecting to a MySQL database.
- Allow use T_AS in closure use statement
Allow user use a alias name for lexical variable of closure
- strn(case)cmp supporting a negative length as its third paramter
This extends PHP's string function strn(case)cmp to support a negative length as parameter
- Nested Class Support
This RFC proposes support for nested classes, following on from Anonymous Classes.
This section is for RFCs that have been deferred, obsoleted, or appear to have been abandoned. Sorry if your RFC is added here and you feel it is still active; please move it back to the appropriate section.
- PECL versioning
This RFC, about tackling the versioning issues in PECL extensions, has been implemented across PECL for several months. But what should be done about extension versioning in the PHP core?
- Improve consistency of protected member lookups
This RFC proposes to eliminate an inconsistency in the way protected class members are resolved.
- Drop sql.safe_mode
Dropping a php.ini setting affecting two extensions
- Get Random
This RFC talks about how to get a (better) random string in PHP
- Error optimizations
A way to optimize the formatting of our errors
- Function autoloading through spl_autoload*
This RFC introduces a potential implementation for function autoloading which would be consistent with what we have for autoloading classes. (Created 2011/08/05)
- CLI options for strict and quiet modes
This RFC proposes a
-Woption to turn on maximum error reporting, and a
-Qoption for no error reporting. (Created 2011/07/05)
- Add Logical Shift Operators
Add logical shift operators for bitwise shifting of strings (Created 2011/07/18)
- Faster strtod algorithm
This RFC proposes to add the Grisu3 strtod algorithm as an optional feature to PHP. (Created 2011/07/15)
- Isset Set Operator
This RFC proposes new operators for handling unset/falsey variables.
- Scalar Type Casting Magic Methods
This RFC proposes a set of new scalar type casting magic methods for classes.
- docBlock Parser
Proposal to add docBlock parsing to the Reflection extension
- Annotations in doc block
Class Metadata feature (aka Annotations) support in PHP through DocBlock
- Object and Array Literals
This RFC proposes first-class, inline object and array literals similar to JSON.
- Weak References
This RFC proposes the introduction of Weak References in PHP via a new SPL class.
- PDO Version 1 Improvements
This RFC proposes a set of improvements to be made to PDO.
- Tainted variables
This RFC proposes an implementation of variable tainting in PHP.
- Static classes
This RFC proposes the introduction of static classes for PHP
- class casting to scalar
This RFC proposes a way to do like __toString(), for other scalar types
This RFC proposes the ability to define missing definitions (generalization of autoload).
- Line Markers in PHP
This RFC proposes the introduction of line markers in PHP.
Autoboxing feature in PHP
- Systemd socket activation
Systemd socket activation support for PHP-FPM (Created 2012/10/18)
- Add a deprecated modifier for functions
Add a deprecated modifier for functions (Created 2012/12/25)
- Clarifying/Improving the prototype checks
This RFC discusses the current state of prototype checks, and gives some directions for discussion and improvement. (Created 2011/09/19)
- Introducing Jenkins
This RFC proposes using Jenkins as a Continuous Ingtegration environment for the php project. (Created 2011/11/01)
- Support for anonymous catch-statements
This RFC proposes adding catch-statements without variables, and fully anonymous catches. (Created 2013/06/25)
- Errors as Exceptions
This RFC discusses the conversion of errors to exceptions (Created 2011/04/06)
- Proposed modifications to traits
This RFC proposes three modifications to traits: increasing separation and consistency of inheritance vs. trait composition, adding trait-local scope, and extending
usesyntax. (Created 2011/04/06)
- Add toString to DateTime
A proposal to add toString to DateTime (Created 2012/09/01)
- Property get/set syntax
This RFC proposes to add a C# style property get/set syntax to PHP classes. (Created 2011-12-21 - document index)
- Make T_FUNCTION in method declarations optional.
A proposal for removing the requirement to use T_FUNCTION in method declarations. (Created 2011/04/06)
- Jsonable interface
Feature request to allow support json_(encode|decode) to handle Object instance conversions.
This RFC proposes to create a cemetery for dead extensions (PECL or core).
This RFC proposes adding array_delete() as an intuitive API for array element deletion. (Created 2012/08/22)
- Enum language structure
A proposal to add the enum language structure (Created 2010/05/21)
- Enhanced Error Handling
This offers a concept and implementation to let the user (php coder) choose between php_error, exception et al while retaining backwards compatibility (Created 2009/12/27)
- Parameter (and Return) value type hints/checks
Several RFC that propose to complete the actual parameter type hints/checks (and an implementation for return value type hints). (Created 2009/07/03)
- Native TLS in ZTS
Improving performance of ZTS builds by using native thread local storage. (Created 2008/08/24)
- Better benchmarks for PHP
A proposal for replacing current bench.php benchmarking script. (Created 2009/04/03)
- Remove reliance of Zend API
A proposal to remove the use of the Zend API in PHP libraries. (Created 2009/03/29)
- PHP Native Interface
Provide complete alternative to writing libraries interfaces using the Zend API libraries. (Created 2009/04/05)
- Function call chaining
Function call chaining implementation. (Created 2010/01/30)
- Source files without opening tag
This RFC proposes a way to support source code files without <?php at the top.
- New File Type for Pure-Code PHP Scripts
This RFC proposes the creation of a new .phpp file type for scripts that contain only PHP code without a <?php or ?> tag.
- Lemon as a language parser
This RFC discusses the switch from YACC/Bison to lemon for the main language parser