---
title: "PHP 8.4 on virallisesti julkaistu – on aika ottaa se käyttöön"
canonical_url: "https://www.speedzone.fi/blogi/php-8-4-on-virallisesti-julkaistu-on-aika-ottaa-se-kayttoon/"
post_type: "post"
published: "2025-01-17T10:19:20+00:00"
modified: "2025-01-30T12:29:04+00:00"
author: "Ingmar Aasoja"
featured_image: "https://www.speedzone.fi/static/sites/2/2025/01/PHP-8.4-on-virallisesti-julkaistu-–-on-aika-ottaa-se-kayttoon.jpg"
taxonomies:
  category:
    - name: "Päivitykset"
      url: "https://www.speedzone.fi/blogi/category/paivitykset/"
  post_tag:
    - name: "Kehittäjälle"
      url: "https://www.speedzone.fi/blogi/tag/kehittajalle/"
    - name: "php"
      url: "https://www.speedzone.fi/blogi/tag/php/"
    - name: "PHP 8.4"
      url: "https://www.speedzone.fi/blogi/tag/php-8-4/"
    - name: "Teknistä"
      url: "https://www.speedzone.fi/blogi/tag/teknista/"
  skills:
    - name: "Asiantuntijalle"
      url: "https://www.speedzone.fi/blogi/skill/asiantuntijalle/"
    - name: "Edistyneille"
      url: "https://www.speedzone.fi/blogi/skill/edistyneille/"
---

# PHP 8.4 on virallisesti julkaistu – on aika ottaa se käyttöön

**Marraskuun lopussa julkaistiin PHP:n versio 8.4. Zonen asiakkaat ovat voineet testata uuden sukupolven PHP:tä aiempien julkaisujen kanssa:** ***beta*****-versioista** ***release candidate*****-versioihin, mutta nyt myös lopullinen versio on palvelimillamme kaikkien saatavilla. Tässä on lyhyt katsaus uusimman version päivityksiin ja ominaisuuksiin.**

![PHP 8.4 on virallisesti julkaistu – on aika ottaa se käyttöön](https://www.speedzone.fi/static/sites/2/2025/01/PHP-8.4-on-virallisesti-julkaistu-–-on-aika-ottaa-se-kayttoon-1024x577.jpg)### **Olion alustus ilman sulkeita**

Vaikka tämä onkin koodaajille pikemmin kosmeettinen uudistus, olion käyttöönotto alustuksen jälkeen helpottuu. Uuden olion luokan nimeä ei enää tarvitse laittaa sulkeisiin.

******PHP 8.3******

```php
(new Class())->someFunction();Code language: PHP (php)
```

******PHP 8.4******

```php
new Class()->someFunction();
Code language: PHP (php)
```

### <a></a>***Property hooks***

Monista ohjelmointikielistä tuttua syntaksia, joka auttaa koodaajia kuvailemaan luokkia hieman siistimmin ja joissain tapauksissa vähentämään turhilta tuntuneiden *getterien* ja *setterien* käyttöä.

****PHP 8.3****

```php
class Person
{
    private string $name;

    public function setName(string $name)
    {
        if (is_numeric($name)) {
            throw new Exception('Invalid name');
        }
        $this->name = $name;
    }

    public function getName(): string
    {
        return $this->name;
    }
}

$person = new Person();
$person->setName('John');
echo $person->getName(); // 'John'
$person->setName('123'); // errorCode language: PHP (php)
```

******PHP 8.4******

```php
class Person
{
    public string $name
    {
        set($name) {
            if (is_numeric($name)) {
                throw new Exception('Invalid name');
            }
        }
    }
}

$person = new Person();
$person->name = 'John';
echo $person->name; // 'John'
$person->name = '123'; // errorCode language: PHP (php)
```

### ***Epäsymmetrinen näkyvyys***

Samoin kuin edellä, epäsymmetrinen näkyvyys auttaa puhdistamaan koodin turhista tarkistuksista ja niistä johtuvista *gettereistä* ja *settereistä*.

****PHP 8.3****

```php
class Something
{
    private bool $isModified = false;

    public function modify()
    {
         // ...something
         $this->isModified = true;
    }

    public function getIsModified(): bool
    {
        return $this->isModified;
    }
}

$foo = new Something();
$foo->modify();
var_dump($foo->getIsModified()); // true
$foo->isModified = false; // error;Code language: PHP (php)
```

******PHP 8.4******

```php
class Something
{
    public private(set) bool $isModified = false;

    public function modify()
    {
         // ...something
         $this->isModified = true;
    }
}

$foo = new Something();
$foo->modify();
var_dump($foo->isModified); // true
$foo->isModified = false; // error;Code language: PHP (php)
```

### <a></a>***Deprecated****–*****attribuutti**

On lisätty mahdollisuus asettaa jokin funktio tai metodi vanhentuneeksi (*deprecated*) siten, että se tunnistetaan samalla tavalla kuin PHP:n sisäiset vanhentumiset, lisäämällä asianmukaiseen [funktioon tai metodiin Deprecated-attribuutti](https://www.php.net/manual/en/class.deprecated.php).

****PHP 8.3****

```php
class Person
{
    /**
     * @deprecated 1.9 use getName()
     */
    public function getPersonName()
    {
        return $this->getName();
    }

    public function getName()
    {
        return 'Pirgit';
    }
}

(new Person())->getPersonName(); // no warningCode language: PHP (php)
```

******PHP 8.4******

```php
class Person
{
    #[\Deprecated(
        message: 'use getName()',
        since: '1.9',
    )]
    public function getPersonName()
    {
        return $this->getName();
    }

    public function getName()
    {
        return 'Pirgit';
    }
}

(new Person())->getPersonName(); // Deprecated: Method Person::getPersonName() is deprecated since 1.9, use getName()Code language: PHP (php)
```

### **ext-dom-kehittäminen ja HTML5-tuki**

Uusi **DOM API** lisää standardien mukaisten HTML5-dokumenttien jäsentämisen tuen. Lisäksi se korjaa taustalla useita virheitä, jotka vaikuttivat DOM-toimintoihin. Jotta mikään ei rikkoudu takautuvasti, uusi API käyttää `Dom`-nimiavaruutta. Vastaavat objektit voidaan alustaa luokilla `Dom\HTMLDocument` ja `Dom\XMLDocument`. Teknisestä puolesta voidaan vielä mainita, että se perustuu tähänastisen libxml-kirjaston sijaan uuteen kirjastoon nimeltä [Lexbor](https://lexbor.com/). Niille, jotka ovat hieman enemmän kiinnostuneita tällaisista muutoksista, on myös [yksityiskohtaisempi blogikirjoitus](https://blog.keyvan.net/p/parsing-html-with-php-84)

### **BCMath** ***Object API***

Niille, jotka kirjoittavat koodia, jossa luvuilla on suuri merkitys (esimerkiksi valuutan muuntosovelluksessa), PHP:n uusi versio tarjoaa mahdollisuuden lähestyä lukuja olioina.

******PHP 8.3******

```php
$number1 = '1.5544';
$number2 = '1.00';
$result = bcadd($number1, $number2, 4);
echo $result; // '2.5544'Code language: PHP (php)
```

******PHP 8.4******

```php
use BcMath\Number;
$number1 = new Number('1.5544');
$number2 = new Number('1.00');
$result = $number1 + $number2;
echo $result; // '2.5544'
var_dump($number1 < $number2); // falseCode language: PHP (php)
```

### <a></a> **Uudet array\_\*-funktiot**

Tähän asti taulukoiden (*array*) käsittely ilman ohjelmistokehyksen tai lisäpaketin asentamista vaati joissakin tapauksissa paljon ylimääräistä työtä, mutta nyt PHP tarjoaa tätä varten uusia sisäänrakennettuja toimintoja:

[array\_find()](https://www.php.net/manual/en/function.array-find.php),
[array\_find\_key()](https://www.php.net/manual/en/function.array-find-key.php),
[array\_any()](https://www.php.net/manual/en/function.array-any.php),
ja [array\_all()](https://www.php.net/manual/en/function.array-all.php).

## **Suosittelemme, että otat PHP 8.4:n käyttöön mahdollisimman pian**

Edellä mainittujen lisäksi on monia muitakin uusia asioita, joita ei voi mainita tässä ja joista voit lukea lisää [PHP:n verkkosivuilta](https://www.php.net/releases/8.4/en.php#other_new_things). Kuten yleensä, tässäkin versiossa [joitakin toimintoja on poistettu käytöstä](https://www.php.net/releases/8.4/en.php#deprecations_and_bc_breaks), joten ennen version päivittämistä kannattaa varmistaa, että niitä ei ole enää käytössä.

Kannustamme sinua kokeilemaan, [toimiiko sivustosi jo uudella PHP-versiolla](https://help.zone.eu/en/kb/how-to-test-and-update-servers-with-deprecated-php-versions/), ja [ottamaan uusi versio käyttöön](https://help.zone.eu/en/kb/how-to-change-php-version-in-the-web-server/), jos mahdollista. Jos haluat, että päivitämme PHP-version jatkossa puolestasi, suosittelemme, että asetat My Zone -palvelun kautta verkkosivustollesi PHP-päivitysstrategian.

Uuden version myötä tarkistammekin PHP-versioiden strategioita. Pian PHP päivittyy versioon 8.3 niillä, jotka käyttävät **Zone Recommended** -strategiaa. **WordPress**-strategiaa käyttävillä PHP:n versioksi jää vielä 8.2, koska version 8.3 tuki on WordPressin kehittäjien mielestä vielä *beta*-tilassa. Strategiasta johtuvista versiomuutoksista ilmoitamme asiakkaillemme etukäteen sähköpostitse.
