---
title: "PHP 8.2 on nyt julkistettu virallisesti"
canonical_url: "https://www.speedzone.fi/blogi/php-8-2-on-nyt-julkistettu-virallisesti/"
post_type: "post"
published: "2023-01-09T10:52:11+00:00"
modified: "2023-04-19T09:46:15+00:00"
author: "Zone Blogi"
featured_image: "https://www.speedzone.fi/static/sites/2/2023/01/PHP-8.2-on-nyt-julkistettu-virallisesti.png"
taxonomies:
  category:
    - name: "Tekninen"
      url: "https://www.speedzone.fi/blogi/category/tekninen/"
  post_tag:
    - name: "Kehittäjälle"
      url: "https://www.speedzone.fi/blogi/tag/kehittajalle/"
    - name: "Päivitykset"
      url: "https://www.speedzone.fi/blogi/tag/paivitykset/"
    - name: "PHP8.2"
      url: "https://www.speedzone.fi/blogi/tag/php8-2/"
  skills:
    - name: "Asiantuntijalle"
      url: "https://www.speedzone.fi/blogi/skill/asiantuntijalle/"
    - name: "Edistyneille"
      url: "https://www.speedzone.fi/blogi/skill/edistyneille/"
---

# PHP 8.2 on nyt julkistettu virallisesti

**Tarkkaavainen blogimme lukija tietää, että Zonessa on ollut mahdollista testata PHP:n uusinta versiota 8.2 jonkin aikaa sen betaversion julkaisun jälkeen. 8. joulukuuta PHP 8.2 on jättänyt julkaisuehdokkaan statuksen ja se on julkistettu virallisesti. Tämän julkaisun myötä on otettu taas iso askel PHP scriptikielen kehityksessä. Jäljempänä keskitymmekin tärkeimpiin muutoksiin.**

![PHP 8.2 on nyt julkistettu virallisesti](https://www.speedzone.fi/static/sites/2/2023/01/PHP-8.2-on-nyt-julkistettu-virallisesti.png)## ***Read only*** **-luokat**

Jos versiosta 8.1 lähtien luokan *property* voitiin asettaa vain luku -muotoiseksi, niin nyt se voidaan tehdä globaalisti koko luokalle.

Aiemmin:

```php
class Person
{
    public readonly string $name;

    public readonly int $age;

    public function __construct(string $name, int $age)
    {
        $this->age = $age;
        $this->name = $name;
    }
}Code language: PHP (php)
```

Versiosta 8.2 alkaen:

```php
readonly class Person
{
    public string $name;

    public int $age;

    public function __construct(string $name, int $age)
    {
        $this->age = $age;
        $this->name = $name;
    }
} Code language: PHP (php)
```

## **DNF (*****Disjunctive Normal Form*****) -tyypit**

On huomionarvoista, että PHP-tyyppijärjestelmä on kehittynyt erittäin nopeasti uusimpien versioiden myötä. Aiemmin lisättyjen *union*– eli yhteistyyppien lisäksi tyyppejä voidaan nyt linkittää ehtoihin. Kun aiemmin ei ollut mahdollista määrittää syötteeksi esimerkiksi, että muuttujan tulee implementoida useita interfeissejä, niin nyt se on tehty mahdolliseksi. Tietenkin se tapahtuu nyt myös kaikkien tyyppien kanssa.

```php
class Race {
    public function register((Car&OffRoad)|null $vehicle)
    {
        //...
    }
} Code language: PHP (php)
```

## ***null*****,** ***false*** **ja** ***true*** **erillisenä tyyppinä**

Lisäksi PHP-kehittäjät täydensivät olemassa olevaa tyyppijärjestelmää poikkeuksilla, jotka itse asiassa määräävät arvon.

```php
class MyValue
{
    public function iAmFalse(): false {/**/}

    public function iAmTrue(): true {/**/}

    public function iAmNull(): null {/**/}
}Code language: PHP (php)
```

## Vakiot *trait*’eissa

Versiosta 8.2 alkaen vakioita voi käyttää myös traitien sisällä. Niitä saa kuitenkin käyttää vain sellaisessa luokassa, joka käyttää traitia ja vain luokan omalla nimellä.

```php
trait Something {
    public const SOMEVALUE = 1;
}

class Someone {
    use Something;
}

var_dump(Someone::SOMEVALUE) // 1Code language: PHP (php)
```

## **Dynaamisten ominaisuuksien deprekointi eli toiminnallisuuksien karsiminen**

Lisäksi versiosta 8.2 lähtien virheiden ja bugien välttämiseksi on deprekoitu dynaamiset ominaisuudet. Poikkeuksena on sisään rakennettu luokka `stdClass`. Tämä muutos ei vaikuta `__get` ja `__set` -maagisiin menetelmiin. Tämä voidaan nyt myös ohittaa asettamalla luokalle ominaisuus `#\AllowDynamicProperties]`, joka on samoin lisätty uudessa versiossa.

Huomiota voidaan kiinnittää myös siihen, että suunnitelmien mukaan dynaamiset ominaisuudet eivät enää ole sallittuja PHP:n versiosta 9.0 alkaen.

Aiemmin:

```php
class Vehicle
{
    public $ction;
}

$vehicle = new Vehicle();
$vehicle->action = 'Drive';Code language: PHP (php)
```

Versiosta 8.2 alkaen:

```php

class Vehicle
{
    public $ction;
}

$vehicle = new Vehicle();
$vehicle->action = 'Drive';  // NOTICE

$vehicle = new stdClass();
$vehicle->last_name = 'Drive'; // sallittu

#[\AllowDynamicProperties]
class Vehicle
{
    public $ction;
}

$vehicle = new Vehicle();
$vehicle->action = 'Drive';  // myös sallittuCode language: PHP (php)
```

## **`SensitiveParameter`** **-määrite**

Lisätty on myös kauan kaivattu `SensitiveParameter` -määrite, joka antaa mahdollisuuden piilottaa exceptionien *trace*sta arvot, joita ei pitäisi tallentaa mihinkään. Tämä sulkee pois tilanteen, jossa itse salasanat ja tokenit on hajautettu, mutta ne vuotavat silti tekstimuotoisina esimerkiksi lokeihin.

```php
function doSomeQueryWithSecret (
    #[\SensitiveParameter]
    string $password,
    string $username
){
    throw new Exception('Error!');
}Code language: PHP (php)
```

Kun aiemmin `$password`-arvo ei ollut tracessa piilotettu, niin nyt se korvataan arvolla `object(SensitiveParameterValue`**)**.

```php
try {
    doSomeQueryWithSecret('iamreallysecret', 'iamnot')
} catch (Exception $e) {
    echo $e;
}

/*
Stack trace:
#0 example.php(19): doSomeQueryWithSecret('iamreallysecret', 'iamnot')
#1 {main}
*/

// SensitiveParameter atribuudi korral

/*
Stack trace:
#0 example.php(19): doSomeQueryWithSecret(object(SensitiveParameterValue), 'iamnot')
#1 {main}
*/Code language: PHP (php)
```

Lisättyjä ja karsittuja ominaisuuksia on uudessa versiossa runsaasti. Tarkempi katsaus kaikkiin muutoksiin löytyy [PHP:n virallisilta verkkosivuilta](<n virallisilta verkkosivuilta>).

Muistutamme myös eräästä tärkeästä Zone-palveluihin liittyvästä ominaisuudesta: jos haluat ottaa heti käyttöön PHP 8.2:n, voit ensin testata sivustosi toimivuutta uudella versiolla selaimessasi ilman, että sinun tarvitsee muuttaa palvelinasetuksia. Kerroimme siitä myös aikaisemmassa blogipostituksessa [Vähemmän päänsärkyä uusilla PHP-versioilla](https://www.speedzone.fi/fi/vahemman-paansarkya-uusilla-php-versioilla/).
