Что нового в PHP 8.3

typed class constants — типы для констант классов

Doc: https://www.php.net/manual/ru/functions.first_class_callable_syntax.php
Wiki: https://wiki.php.net/rfc/typed_class_constants

interface I {
	const string PHP = 'PHP 8.3';
}

class Foo implements I {
	const string PHP = [];
}

// Fatal error: Cannot use array as value for class constant
// Foo::PHP of type string

json_validate() — функция для проверки строки

Doc: https://php.net/json_validate
Wiki: https://wiki.php

json_validate() позволяет проверить, является ли строка правильным JSON. Более эффективна, чем json_decode().

$json = json_validate( '{ "test": { "foo": "bar" } }' ); // true
if( $json ){
	// do staff
}

До PHP 8.3 нужно было проверять так:

function json_validate( string $string ): bool {
	json_decode( $string );

	return json_last_error() === JSON_ERROR_NONE;
}

$json = json_validate( '{ "test": { "foo": "bar" } }' ); // true
if( $json ){
	// do staff
}

#[\Override] — новый атрибут

wiki: https://wiki.php.net/rfc/marking_overriden_methods

Добавив к методу атрибут #[\Override], PHP убедится, что метод с таким же именем существует в родительском классе или в интерфейсе. Добавление атрибута дает понять, что переопределение родительского метода является намеренным, и упрощает рефакторинг, поскольку удаление переопределенного родительского метода будет обнаружено.

use PHPUnit\Framework\TestCase;

final class MyTest extends TestCase {
	protected $logFile;

	protected function setUp(): void {
		$this->logFile = fopen( '/tmp/logfile', 'w' );
	}

	#[\Override]
	protected function taerDown(): void { // tearDown - правильно имя метода
		fclose( $this->logFile );
		unlink('/tmp/logfile');
	}
}

// Fatal error: MyTest::taerDown() has #[\Override] attribute,
// but no matching parent method exists

Заметка встроена в: PHP 5.3 - 8.5 — Синтаксис, Новинки