Что нового в PHP 8.3
- Release: https://www.php.net/releases/8.3/ru.php
- Wiki: PHP 8.3
- github: Список изменений PHP 8.3
- https://habr.com/ru/news/776250/
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 — Синтаксис, Новинки