---
title: "PHP 8.4 nüüd ametlikult väljas"
canonical_url: "https://www.zone.ee/blogi/php-8-4-nuud-ametlikult-valjas/"
post_type: "post"
published: "2024-12-10T12:03:55+00:00"
modified: "2025-07-15T08:39:46+00:00"
author: "Ingmar Aasoja"
featured_image: "https://www.zone.ee/static/sites/2/2024/12/PHP-8.4-is-out-now1733837647.webp"
taxonomies:
  category:
    - name: "Uuendused"
      url: "https://www.zone.ee/blogi/category/uuendused/"
  post_tag:
    - name: "PHP"
      url: "https://www.zone.ee/blogi/tag/php/"
    - name: "PHP 8.4"
      url: "https://www.zone.ee/blogi/tag/php-8-4/"
    - name: "Tehnline"
      url: "https://www.zone.ee/blogi/tag/tehnline/"
  skills:
    - name: "Edasijõudnule"
      url: "https://www.zone.ee/blogi/skill/edasijoudnule/"
    - name: "Spetsialistile"
      url: "https://www.zone.ee/blogi/skill/spetsialistile/"
---

# PHP 8.4 nüüd ametlikult väljas

**Novembri lõpus lasti välja PHP versioon 8.4. Zone klientidel on olnud võimalik PHP uut põlvkonda testida juba varasemate reliisidega: *betast* kuni *release candidate* versioonideni välja, aga nüüdseks on nendele kõikidele meie serverites saadaval ka lõplik versioon. Teeme siinkohal põgusa ülevaate uuendustest ja võimalustest, mis värske versiooniga saabusid.**

![](https://www.zone.ee/static/sites/2/2024/12/PHP-8.4-is-out-now1733837647-1024x577.jpg)### Objekti initsialiseerimine sulgudeta

Kuigi see on koodikirjutajatele pigem kosmeetiline uuendus, muutub objekti kasutuselevõtt pärast initsialiseerimist lihtsamaks. Enam pole vaja uue objekti klassinime sulgude vahele panna.

**PHP 8.3**

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

**PHP 8.4**

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

### *Property hooks*

Nii mõnestki programmeerimiskeelest teada süntaks, mis aitab koodikirjutajatel klasse veidi puhtamalt kirjeldada ning teatud juhtudel vähendada üleliigsena tundunud *getter*’ite ja *setter*’ite kasutust.

**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)
```

### *Asümeetriline nähtavus*

Sarnaselt eelnevale aitab asümeetriline nähtavus puhastada koodi üleliigsetest kontrollidest ning nendest tingitud *getterit*‘est ja *setterit*‘est.

**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)
```

### *Deprecated* atribuut

Lisandunud on võimalus määrata mõni funktsioon või meetod deprekeerituks nii, et see tuntakse ära sarnaselt PHP sisemistele deprekatsioonidele, selleks tuleb lisada vastavale [funktsioonile või meetodile `Deprecated` attribuut.](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 arendus ning HTML5 tugi

Uus **DOM API** lisab toe standarditele vastavate HTML5 dokumentide parsimiseks. Samuti parandab see taustal mitmeid vigu, mis mõjutasid DOM funktsionaalsust. Selleks, et tagasiulatuvalt midagi katki ei läheks, kasutab uus API `Dom` nimeruumi. Vastavaid objekte saab initsialiseerida klassidega `Dom\HTMLDocument` and `Dom\XMLDocument`. Tehniliselt võib veel ära mainida, et see baseerub senise libxml asemel uuel teegil nimega [Lexbor](https://lexbor.com/). Neile, keda sellised muudatused veidi rohkem huvitavad, on saadaval ka [põhjalikum blogipost](https://blog.keyvan.net/p/parsing-html-with-php-84)

### BCMath *Object API*

Koodi kirjutades numbritega süvitsi kokku puutujatele (näiteks valuuta konverteerimisega seotud rakenduses), on uues PHP versioonis loodud võimalus läheneda numbritele kui objektidele.

**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)
```

### Uued array\_\* funktsioonid

Kui seni vajas massiivide käsitlemine, ilma raamistku või lisapaki paigaldamiseta, teatud juhtudel palju lisatööd, siis nüüd sialdab PHP selleks uusi sisseehitatud funktsioone.

[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)
[and array\_all()](https://www.php.net/manual/en/function.array-all.php)

## Soovitame PHP 8.4 kasutusele võtta esimesel võimalusel

Lisaks eelnevale on lisandunud palju muudki, mida kõike siin ei jõua ära mainida ja mille kohta saab täpsemalt lugeda [PHP kodulehelt](https://www.php.net/releases/8.4/en.php#other_new_things). Nagu tavaliselt, on ka selle versiooni raames [deprekeeritud nii mõnigi funktsionaalsus,](https://www.php.net/releases/8.4/en.php#deprecations_and_bc_breaks) ehk enne versiooni vahetamist võiks veenduda, ega neid kasutusel pole.

Soovitame sul katsetada, [kas sinu koduleht toimib juba uue PHP versiooniga](https://www.zone.ee/help/kb/kuidas-naha-ja-uuendada-aegunud-php-versioone/) ning see ka võimalusel [kasutusele võtta](https://www.zone.ee/help/kb/php-versiooni-muutmine-veebiserveris/). Kui soovid, et tulevikus uuendame PHP versiooni sinu eest, soovitame Minu Zone vahendusel seadistada enda kodulehele [PHP versiooniuuenduste strateegia.](https://www.zone.ee/blogi/2024/05/28/php-versiooniuuenduste-strateegiad/)

Seoses uue versiooniga vaatamegi PHP versioonid strateegiates üle. Peagi muutub PHP versioonile 8.3 neil, kes kasutavad “**Zone Soovitatud**” strateegiat. “**WordPress”** strateegia kasutajatel jääb PHP versiooniks veel 8.2, kuna 8.3 versiooni tugi on WordPressi arendajate osalt hinnatud veel *beta* staatusesse. Strateegiast tingitud versioonimuutustest teavitatame kliente ette e-maili teel.
