PHP 8.4 nüüd ametlikult väljas

Ingmar Aasoja
RSS: Jaga:

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.

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

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

PHP 8.4

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

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

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

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

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.

PHP 8.3

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

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. Neile, keda sellised muudatused veidi rohkem huvitavad, on saadaval ka põhjalikum blogipost

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

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

PHP 8.4

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()
array_find_key()
array_any()
and array_all()

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. Nagu tavaliselt, on ka selle versiooni raames deprekeeritud nii mõnigi funktsionaalsus, ehk enne versiooni vahetamist võiks veenduda, ega neid kasutusel pole.

Soovitame sul katsetada, kas sinu koduleht toimib juba uue PHP versiooniga ning see ka võimalusel kasutusele võtta. Kui soovid, et tulevikus uuendame PHP versiooni sinu eest, soovitame Minu Zone vahendusel seadistada enda kodulehele PHP versiooniuuenduste strateegia.

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. 

Populaarsed postitused

Ettevõtte nime valimine: kuidas teha tark otsus ja vältida hilisemaid probleeme

Ettevõtte nime valimine: kuidas teha tark otsus ja vältida hilisemaid probleeme

Nikita Tikhomirov
Ettevõtte loomine algab ideest. Väga kiiresti jõuab aga iga alustav ettevõtja ühe olulise küsimuseni: mis saab ettevõtte nimeks? Hea nimi ei ole...
Oh Dear! Ehk lihtne viis oma veebilehe olukorrast päriselt ülevaade saada

Oh Dear! Ehk lihtne viis oma veebilehe olukorrast päriselt ülevaade saada

Nikita Tikhomirov
Veebilehtede maailm liigub iga aastaga kiiremini ja muutub aina sõltuvamaks automaatikast, API-dest, turvalisusest ja stabiilsest töökindlusest. Kui...
Küberolümpia: Eesti noorte kübertalentide tee maailma tippu

Küberolümpia: Eesti noorte kübertalentide tee maailma tippu

Lemme Suve
Üheks olulisemaks Eesti noortele suunatud küberturvalisuse algatuseks on Küberolümpia ehk programm ja võistlussari, mis pakub lastele ja noortele...
Kriitiline React ja Next.js turvaauk nõuab kohest parandamist

Kriitiline React ja Next.js turvaauk nõuab kohest parandamist

Ardi Jürgens
Eelmisel nädalal vallandus küberturbekogukonnas torm, kui suhteliselt ootamatult avaldati populaarses Javascripti teegis React ja sellele toetuvas Next.js...