# 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.

<div class="informalexample">

```
<?php
/*
/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

     
```

</div>

## 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.opcache.revalidate-freq) INI directive.

## POSIX

`posix_getrlimit` now takes an optional `resource` 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.