---
title: "PHP 8.5 nüüd ametlikult väljas"
canonical_url: "https://www.zone.ee/blogi/php-8-5-nuud-ametlikult-valjas/"
post_type: "post"
published: "2025-12-04T08:37:55+00:00"
modified: "2025-12-17T12:28:07+00:00"
author: "Ingmar Aasoja"
featured_image: "https://www.zone.ee/static/sites/2/2025/12/PHP-8-5-nyyd-ametlikult-valjas.webp"
taxonomies:
  category:
    - name: "Uuendused"
      url: "https://www.zone.ee/blogi/category/uuendused/"
  post_tag:
    - name: "PHP 8.5"
      url: "https://www.zone.ee/blogi/tag/php-8-5/"
---

# PHP 8.5 nüüd ametlikult väljas

**Novembri lõpus nägi ilmavalgust PHP versioon 8.5, mida [Zone serverites](https://www.zone.ee/et/veebimajutus/) oli võimalik juba mitu kuud alates beetaversioonist testida. Iga uue versiooniga deprekeeritakse vananenud funktsionaalsust ning lisatakse uut. Selles artiklis keskendume pigem uutele funktsionaalsustele.**

![PHP 8.5 nüüd ametlikult väljas](https://www.zone.ee/static/sites/2/2025/12/PHP-8-5-nyyd-ametlikult-valjas-1024x577.webp)## *Pipe operator* (|&gt;)

See on ilmselt kõige vingem süntaksiuuendus ning funktsionaalsus, millest PHP arendajad veel mõned aastad tagasi unistadagi ei osanud. See aitab kindlasti kaasa koodi loetavusele ja kirjutamisele.

Eriti kasulik on see massiivide ja stringide töötluses. Kui lõpptulemuse saamiseks on vaja lasta muutuja läbi mitme funktsiooni, on seda nüüd võimalik teha aheldades.

Näide numbrijadast paaritute arvude eemaldamise kohta:

#### PHP 8.4

```php
$numbers = implode(',',
    array_filter(
        explode(',', '1,2,3,4,5,,6'),
            function ($var) {
                  return $var && !($var & 1);
            }
      )
);

echo $numbers; // 2,4,6
Code language: PHP (php)
```

#### PHP 8.5

```php
$numbers = '1,2,3,4,5,,6'
    |> (fn($s) => explode(',', $s))
    |> (fn($xs) => array_filter($xs, fn($var) => $var && !($var & 1)))
    |> (fn($xs) => implode(',', $xs));

echo $numbers; // 2,4,6
Code language: PHP (php)
```

## `array_first` ja `array_last` funktsioonid

Funktsioonide nimed ütlevad juba ise, milleks need mõeldud on. Senised `array_key_first` ja `array_key_last` tegid küll elu lihtsamaks, kuid siiski tuli eelnevalt kontrollida, kas vastav element massiivis üldse eksisteerib.

#### PHP 8.4

```php
$names = ['john', 'smith'];
$lastName = $names === [] ? null : $names[array_key_last($names)];

echo $lastName; // smithCode language: PHP (php)
```

#### PHP 8.5

```php
$names = ['john', 'smith'];
$lastName = array_last($names);

echo $lastName; // smithCode language: PHP (php)
```

## *Stack trace* fataalsetes veateadetes

Programmi lõpetavate errorite puhul oli sageli keeruline välja selgitada, kus sisemine probleem täpselt tekkis. Nüüd on veateadetes võimalik saada täpsemat infot. Märkusena: selleks peab `php.ini` failis olema seadistatud `fatal_error_backtraces = On`.

```php
ini_set('memory_limit', '2M');

$dates = [];

function collectDates($dates) {
    while (true) {
        $dates[] = time();
    }
}

collectDates($dates);Code language: PHP (php)
```

#### PHP 8.4 väljund:

```
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 2097160 bytes) in /test.php on line 9
```

#### PHP 8.5 väljund:

```php
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 2097160 bytes) in /test.php on line 9
Stack trace:
#0 /test.php(13): collectDates(Array)
#1 {main}Code language: PHP (php)
```

## URI Extension

Kui varem tuli URL-ist info kättesaamiseks see lahti võtta ja kontrollida, kas vastav osa eksisteerib, siis nüüd on selle jaoks olemas spetsiaalne laiendus:

#### PHP 8.4

```php
$parsed = parse_url('https://example.com:80');

echo $parsed['port'] // 80
echo $parsed['path'] // Warning: Undefined array key "path" ...Code language: PHP (php)
```

#### PHP 8.5

```php
use Uri\Rfc3986\Uri;

$uri = new Uri('https://example.com:80');

echo $uri->getPort(); // 80
echo $uri->getpath(); // ""
echo $uri->withPort(null)->toString(); // https://example.comCode language: PHP (php)
```

## \#\[\\NoDiscard\] atribuut

Kui funktsioon on määratud midagi tagastama ja see väärtus on koodis oluline, saab nüüd funktsioonile määrata atribuudi, mis nõuab tagastatud väärtuse kasutamist:

#### PHP 8.4

```php
function getName() {
    return 'Sohn Smith';
}

getName();Code language: PHP (php)
```

#### PHP 8.5

```php
#[\NoDiscard]
function getName() {
    return 'Sohn Smith';
}

getName();

// Warning: The return value of function getName() should either be used or intentionally ignored by casting...Code language: PHP (php)
```

## Kokkuvõtteks

Täpsem info uue versiooni kohta on leitav PHP kodulehel, kus versioonile 8.5 on loodud [spetsiaalne alamleht](https://www.php.net/releases/8.5/en.php). Uue versiooni tulekuga tasub ära märkida ka seda, et versiooni 8.1 turvauuendused lõppevad 2025. aasta lõpus ning versioon 8.3 liigub aktiivsest toest ainult turvauuenduste faasi. Soovitatav on olemasolevad rakendused esimesel võimalusel uuele versioonile üle viia. Näiteks [Laravel 12](https://github.com/laravel/framework/releases/tag/v12.40.0) juba toetab kõige uuemat versiooni, samuti äsja välja tulnud [Symfony 8.0](https://symfony.com/releases/8.0).
