New Features

- « Migrating from PHP 8.2.x to PHP 8.3.x

- New Classes and Interfaces »

- PHP Manual
- Migrating from PHP 8.2.x to PHP 8.3.x
- New Features

## New Features

### PHP Core

#### Readonly Amendments

Anonymous classes may now be marked as readonly.

Readonly properties can now be reinitialized during cloning.

#### Typed Class Constants

Class, interface, trait, and enum constants now support type declarations.

#### Closures created from magic methods

Closures created from magic methods can now accept named arguments.

#### The final modifier with a method from a trait

The final modifier may now be used when using a method from a trait.

#### Override Attribute

Added the #[\Override] attribute to check that a method exists in a parent class or implemented interface.

#### Fetch class constant dynamically syntax

Class constants can now be accessed dynamically using the `C::{$name}` syntax.

#### Static variable Initializers

Static variable initializers can now contain arbitrary expressions.

#### Fallback value syntax for ini variables

php.ini now supports fallback/default value syntax.

    <?php/*On /path/to/user.ini contains the following settings:listen = localhost:${DRUPAL_FPM_PORT:-9000}*/$user_ini = parse_ini_file('/path/to/user.ini');echo $user_ini['listen']; // localhost:9000

### CLI

It is now possible to lint multiple files.

### DOM

Added properties DOMElement::$className and DOMElement::$id. These are not binary-safe at the moment because of underlying limitations of libxml2. This means that the property values will be cut off at a NUL byte.

Added properties DOMNode::$isConnected and DOMNameSpaceNode::$isConnected.

Added properties DOMNode::$parentElement and DOMNameSpaceNode::$parentElement.

### FFI

It is now possible to assign FFI\CData to other FFI\CData. Meaning CData can now be assigned to structs and fields.

### Opcache

`opcache_get_status()['scripts'][n]['revalidate']` now contains a Unix timestamp of when the next revalidation of the scripts timestamp is due, dictated by the opcache.revalidate_freq INI directive.

### POSIX

posix_getrlimit() now takes an optional `$res` parameter to allow fetching a single resource limit.

posix_isatty() now raises type warnings for integers following the usual ZPP semantics.

posix_ttyname() now raises type warnings for integers following the usual ZPP semantics and value warnings for invalid file descriptor integers.

### Streams

Streams can now emit the `STREAM_NOTIFY_COMPLETED` notification. This was previously not implemented.