PHP 8.5 on nyt virallisesti julkaistu
Marraskuun lopussa julkaistiin PHP 8.5, jota SpeedZone-palvelimilla on voinut testata jo useiden kuukausien ajan beetavaiheesta lähtien. Jokainen uusi versio poistaa vanhentunutta toiminnallisuutta ja tuo mukanaan uusia parannuksia. Tässä artikkelissa keskitymme erityisesti uusiin ominaisuuksiin.

Pipe-operaattori (|>)
Tämä on ehkä yksi siisteimmistä syntaksiparannuksista – vielä muutama vuosi sitten PHP-kehittäjät tuskin osasivat edes haaveilla tällaisesta. Uudistus parantaa huomattavasti koodin luettavuutta ja tekee kirjoittamisesta sujuvampaa.
Pipe-operaattori on erityisen hyödyllinen taulukoiden ja merkkijonojen käsittelyssä. Jos lopputuloksen saavuttamiseksi täytyy ajaa muuttuja usean funktion läpi, sen voi nyt tehdä helposti ketjuttamalla.
Esimerkki parittomien lukujen poistamisesta lukujonosta:
PHP 8.4
$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
$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 -funktiot
Kuten nimistä voi päätellä, nämä funktiot helpottavat ensimmäisen ja viimeisen arvon hakemista taulukosta. Aiemmat array_key_first ja array_key_last helpottivat tilannetta jo jonkin verran, mutta niiden kanssa oli silti tarkistettava erikseen, löytyykö arvo todella taulukosta.
PHP 8.4
$names = ['john', 'smith'];
$lastName = $names === [] ? null : $names[array_key_last($names)];
echo $lastName; // smithCode language: PHP (php)
PHP 8.5
$names = ['john', 'smith'];
$lastName = array_last($names);
echo $lastName; // smithCode language: PHP (php)
Stack trace kohtalokkaissa virheilmoituksissa
Ohjelman keskeyttävät virheet ovat aiemmin olleet hankalia analysoida, koska todellisen virheen syntypiste jäi helposti piiloon. PHP 8.5 näyttää nyt tarkemman stack tracen myös fataaleissa virheissä. Huomio: tämä vaatii asetuksen fatal_error_backtraces = On PHP:n php.ini-tiedostossa.
ini_set('memory_limit', '2M');
$dates = [];
function collectDates($dates) {
while (true) {
$dates[] = time();
}
}
collectDates($dates);Code language: PHP (php)
PHP 8.4 tuloste:
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 2097160 bytes) in /test.php on line 9
PHP 8.5 tuloste:
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-laajennus
Aiemmin URL:stä tietojen poimiminen vaati rakenteen purkamista ja tarkistusta, onko tarvittava osa olemassa. PHP 8.5 tarjoaa tätä varten nyt oman laajennuksen:
PHP 8.4
$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
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] -attribuutti
Kun funktion palauttamalla arvolla on merkitystä, on nyt mahdollista merkitä funktio attribuutilla, joka vaatii palautteen käyttämistä. Tämä auttaa havaitsemaan tilanteet, joissa tärkeä paluuarvo vahingossa jätettäisiin huomiotta.
PHP 8.4
function getName() {
return 'Sohn Smith';
}
getName();Code language: PHP (php)
PHP 8.5
#[\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)
Yhteenveto
Lisätietoja uudesta versiosta löytyy PHP:n virallisilta sivuilta, joille on tehty oma osionsa versiolle 8.5. On hyvä huomioida, että PHP 8.1 -turvapäivitykset päättyvät vuoden 2025 lopussa, ja PHP 8.3 siirtyy aktiivisesta tuesta pelkkiin tietoturvapäivityksiin. Suosittelemme päivittämään olemassa olevat projektit uuteen versioon mahdollisimman pian. Esimerkiksi Laravel 12 ja juuri julkaistu Symfony 8.0 tukevat jo PHP 8.5 -versiota.