Skip to content

Implementation status

Timm Friebe edited this page Feb 14, 2026 · 61 revisions

The following table gives an overview of the current implementation status. The goal is to have check marks everywhere!

Feature PHP 7.4 PHP 8.0 PHP 8.1 PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5 PHP 8.6
Future PHP?
• Nullable casting ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
• Match without expression ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
• fn with block ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
Hack
• Using statement / Disposables ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
• Function types ✔(1) ✔(1) ✔(1) ✔(1) ✔(1) ✔(1) ✔(1) ✔(1)
• Array and map types ✔(1) ✔(1) ✔(1) ✔(1) ✔(1) ✔(1) ✔(1) ✔(1)
PHP 8.6
• Partial Function Application ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
PHP 8.5
• Pipe operator v3 ✔ ✔ ✔ ✔ ✔ ✔ native native
• Final Property Promotion ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
• Support Closures in constant expressions ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
PHP 8.4
• Asymmetric visibility ✔(6) ✔(6) ✔(6) ✔(6) ✔(6) native native native
• new ... without parentheses ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
• Property hooks ✔(6) ✔(6) ✔(6) ✔(6) ✔(6) native native native
PHP 8.3
• Typed class constants ✔(1) ✔(1) ✔(1) ✔(1) native native native native
• Marking overridden methods ✔ ✔ ✔ ✔ native native native native
• Dynamic class constant fetch ✔ ✔ ✔ ✔ native native native native
• Arbitrary static variable initializers ✔ ✔ ✔ native native native native native
PHP 8.2
• True type ✔(5) ✔(5) ✔(5) native native native native native
• False type ✔(5) ✔(5) ✔(5) native native native native native
• Null type ✔(1) ✔(1) ✔(1) native native native native native
• Readonly classes ✔ ✔ ✔ native native native native native
PHP 8.1
• Array unpacking with string keys ✔ ✔ native native native native native native
• Readonly properties ✔ ✔ native native native native native native
• Pure intersection types ✔(1) ✔(1) native native native native native native
• First-class callable syntax ✔ ✔ native native native native native native
• Never return type ✔(4) ✔(4) native native native native native native
• New in initializers ✔(3) ✔(3) ✔(3) ✔(3) ✔(3) ✔(3) ✔(3) ✔(3)
• Enumerations ✔ ✔ native native native native native native
• Octal integer literal notation ✔ ✔ native native native native native native
PHP 8.0
• Static return type native native native native native native native
• Match expression ✔ native native native native native native native
• Named Arguments ✔(2) native native native native native native native
• Mixed type ✔(1) native native native native native native native
• Attributes / Annotations ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
• Null-safe instance operator ✔ native native native native native native native
• Constructor argument promotion ✔ native native native native native native native
• Throw expressions ✔ native native native native native native native
• ::class on objects ✔ native native native native native native native
• Union types ✔(1) native native native native native native native
• Arbitrary expression support for new ✔ native native native native native native native
PHP 7.4
• Spread Operator in Array Expression native native native native native native native native
• Numeric Literal Separator native native native native native native native native
• Arrow functions native native native native native native native native
• Property types native native native native native native native native

Notes:

  1. Currently unchecked.
  2. Only in the correct order.
  3. Except for class constants.
  4. Emitted as void.
  5. True and false types emitted as bool.
  6. Limited in inheritance due to being emulated, see xp-framework/compiler#166

Clone this wiki locally