====== Proposals for PHP 8 ====== ===== Introduction ===== This page is a spot to list and discuss ideas for PHP 8. This is not a place to discuss features which may be accepted in the 7.X series; it is for features which require backwards compatibility breaks to achieve. ===== Ideas and Proposals ===== Here are some ideas that have backwards compatibility implications: * Unify behavior of userland and internal functions. * In particular when internal functions fail to parse argument types correctly they fail by returning null. Userland functions throw a TypeError. * Merge symbol tables: * **[[rfc:php8:merge_member_symbol_tables|Merge Class Member Symbol Tables]]** * **[[rfc:php8:merge_symbol_tables|Merge Constant, Function, and Class Symbol Tables]]** * Extend ''instanceof'' to work with non-classes and add new functions for checking type and subtype relationships e.g. ''($int instanceof int)'' ''is_type_of(1, 'int')'' ''is_subtype_of('array', 'iterable')''. * Unify class and abstract type error behaviors when method incompatibilities exists; see https://3v4l.org/hamQi * Remove always ''true'' return when isn't helpful for some functions and methods; see [[https://bugs.php.net/bug.php?id=75958|#75958]]. Here are some feature ideas: * [[rfc:covariant-returns-and-contravariant-parameters]] Add parameter contravariance and return type covariance. This will probably change when autoloads are triggered. Additionally we probably want to reserve new types related to variance such as ''mixed''. New types in the global namespace are technically reserved already but in practice it would have a small BC impact. * JIT (link?) * FFI (link?)