PHP 8.5 on nyt virallisesti julkaistu

Ingmar Aasoja
RSS: Jaa:

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.

PHP 8.5 on nyt virallisesti julkaistu

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.

Suositut postaukset

Verkkotunnusuudistus voi nostaa .FI hintoja, mutta tasoittaa pelikentän

Verkkotunnusuudistus voi nostaa .FI hintoja, mutta tasoittaa pelikentän

Ardi Jürgens
Vaikka marraskuu ja ensilumi lähestyvät väistämättä, käy suomalaisessa verkkoyhteisössä kuumana: Traficom ehdottaa .FI-verkkotunnusten hinnankorotusta...
SpeedZone ja GroundUp yhdistivät voimansa

SpeedZone ja GroundUp yhdistivät voimansa

Rauno Kais
Olemme erittäin innoissamme voidessamme ilmoittaa, että olemme yhdistäneet voimamme GroundUp-yhteisön kanssa Suomessa. Osana yhteistyötä SpeedZone...
SpeedZone aloittaa yhteistyön kood/Sisun kanssa

SpeedZone aloittaa yhteistyön kood/Sisun kanssa

Jaanus Putting
Meillä on ilo ja ylpeys kertoa, että SpeedZone on liittynyt kood/Sisun kumppaniverkostoon Suomessa. Tämä on meille merkittävä askel, sillä uskomme...
Mikä on webhotelli ja mihin tarvitset sitä? – Annan matka verkkoon

Mikä on webhotelli ja mihin tarvitset sitä? – Annan matka verkkoon

Nikita Tikhomirov
Pelkkä verkkotunnus ei riitä – jos haluat yrityksesi löytyvän netistä, tarvitset myös digitaalisen kodin. Tässä blogissa seurataan Annan matkaa...