| Release Date |
December 2015 |
November 2020 |
| Performance |
Significant performance improvements with PHP 7 |
Slightly improved performance over PHP 7 |
| JIT (Just-in-Time) Compilation |
Not available |
Introduced JIT compilation for better performance in specific scenarios |
| Type Error Handling |
Limited type handling with less strict type checking |
Stronger and stricter type handling with union types and improvements to type errors |
| Union Types |
Not available |
Supports union types (e.g., int|float) |
| Named Arguments |
Not available |
Introduced named arguments for better flexibility and readability |
| Nullsafe Operator |
Not available |
Introduced ?-> (nullsafe operator) to handle null values more cleanly |
| Match Expression |
Not available |
Introduced the match expression, an improvement over switch statements |
| Attributes (Annotations) |
Not available |
Introduced native attributes (annotations) to allow metadata for classes, methods, etc. |
| Error Handling |
Fatal errors for type errors |
Type errors are handled as exceptions, improving debugging and error handling |
| Weak Maps |
Not available |
Introduced Weak Maps for better memory management when working with objects |
| Constructor Property Promotion |
Not available |
Allows properties to be defined directly in the constructor, reducing boilerplate code |
| Trailing Comma in Parameter Lists |
Not supported |
Allowed in function parameter lists and closure use lists for cleaner code |
| Stringable Interface |
Not available |
Introduced Stringable interface for objects that can be cast to a string |
| Consistency Improvements |
Some inconsistencies in internal functions |
Internal functions were improved for better consistency, like uniform error handling and parameter order |
| Error Messages |
Basic error messages, sometimes not clear |
More helpful and detailed error messages, making debugging easier |
| Deprecations |
Deprecated many old and unsafe features like create_function() |
Deprecated dynamic properties, implode() with reversed arguments, etc. |
| Resource Handling |
PHP 7 treated resources as scalar values |
PHP 8 introduced Resources as objects, leading to better resource management |
| Compatibility |
Compatible with most old code but introduced some deprecations |
Requires code updates for compatibility, especially with stricter types and new deprecations |