PHP 8.4 nüüd ametlikult väljas

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

Kliendi edulugu: kuidas muster.ee tõstis e-poe müüki, kui leidis Nutika Pilveserveri

Katrin Sulg
E-kaubandus on viimastel aastatel muutunud järjest olulisemaks. Konkurentsitihedas keskkonnas saavad veebilehe kiirus ja töökindlus määravaks. Muster.ee...

Kas domeen kuulub ikka sulle? ICANNi uus reegel sunnib vigaseid andmeid parandama

Jaanus Putting
Alates mai lõpust jõustub ICANNi uus poliitika, mis mõjutab geneeriliste domeenide omanikke. Kes on domeeni seaduslik omanik, määratakse nüüdsest...

Partner soovitab: Kuidas targalt integreerida ja hallata infosüsteeme

Acty
Tänapäeva digitaalses maailmas ei toimi ükski arvestatav organisatsioon enam iseseisvate tarkvaratükkide najal. Infosüsteemide integratsioon on muutunud...

Miks valida .EU domeen nüüd ja täna?

Jaanus Putting
Me elame ajastul, mil globaalsed jõujooned muutuvad kiiremini kui kunagi varem. Kui Euroopa on astunud ühisturuna üha tugevama ja sidusama tegutsemise...