• Czas czytania ~2 min
  • 10.12.2022

The PHP team has released PHP 8.2 today with read-only classes, new stand-alone types, a new random extension, trait constants, oraz more:

Klasy tylko do odczytu

Opierając się na właściwościach tylko do odczytu PHP 8.1, oznaczenie klasy jako tylko do odczytu sprawia, że ​​każda właściwość klasy jest tylko do odczytu i zapobiega tworzeniu właściwości dynamicznych.

readonly class BlogData
{
    public string $title;
 
    public Status $status;
 
    public function __construct(string $title, Status $status)
    {
        $this->title = $title;
        $this->status = $status;
    }
}

Rozłączne typy postaci normalnej (DNF)

Typy DNF łączą typy łączące i przecinające:

class Foo {
    public function bar((A&B)|null $entity) {
        if ($entity === null) {
            return null;
        }
 
        return $entity;
    }
}

Null, fałszywy, and PRAWDA stand-alone types

PHP 8.2 pozwala teraz false, true, and zero jako samodzielne typy. Ten przykład jest dość oczywisty:

class Falsy
{
    public function alwaysFalse(): false { /* ... */ *}
 
    public function alwaysTrue(): true { /* ... */ *}
 
    public function alwaysNull(): null { /* ... */ *}
}

Stałe w cechach

Stałe są teraz dozwolone w cechach. Nie możesz uzyskać dostępu do stałych poprzez nazwę cechy, jednak możesz uzyskać dostęp do stałej poprzez klasę, używając cechy:

trait Foo
{
    public const CONSTANT = 1;
 
    public function bar(): int
    {
        return self::CONSTANT; // Fatal error
    }
}
 
class Bar
{
    use Foo;
}
 
var_dump(Bar::CONSTANT); // 1

Dynamiczna amortyzacja właściwości

Właściwości dynamiczne są przestarzałe, co oznacza, że ​​przy przypisywaniu wartości do właściwości dynamicznej otrzymasz powiadomienie o wycofaniu:

class User
{
    public $name;
}
 
$user = new User();
$user->last_name = 'Doe'; // Deprecated notice
 
$user = new stdClass();
$user->last_name = 'Doe'; // Still allowed

Możesz także zezwolić na właściwości dynamiczne przy użyciu Zezwól na właściwości dynamiczne atrybut:

#[AllowDynamicProperties]
class User() {}
 
$user = new User();
$user->foo = 'bar';

Nowe klasy, interfejsy, atrybuty i funkcje

PHP 8.2 zawiera nowe klasy, interfejsy, atrybuty i funkcje. Pełną listę znajdziesz w sekcji Nowe klasy, interfejsy i funkcje Ogłoszenie wydania PHP 8.2.0.

Wspomnieliśmy już o Zezwól na właściwości dynamiczne atrybut. Kolejnym atrybutem jest tzw #[\Parametr wrażliwy] atrybut, który redaguje poufne informacje w śledzeniu stosu:

function sensitiveParametersWithAttribute(
    #[\SensitiveParameter]
    string $secret,
    string $normal
) {
    throw new Exception('Error!');
}

Ucz się więcej

Aby zapoznać się z tymi nowymi funkcjami, sprawdź Ogłoszenie wydania PHP 8.2.0 strona z przykładami przed/po PHP 8.2 i przejrzyj te linki, aby uzyskać więcej informacji na temat każdego elementu:

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297