PHP 8.4 nüüd ametlikult väljas

Ingmar Aasoja
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

Partner soovitab: milliseid makseviise kassas pakkuda?

Montonio
E-kaubanduse maailm on teinud suure hüppe edasi ajast, mil maksevõimalused piirdusid sularaha ja keeruliste pangaülekannetega. Tänapäeval võib makseprotsess...

Veebimajutus algajatele: Zone teenustega saad kodulehe valmis kiiresti ja turvaliselt

Nikita
Oma kodulehe loomine võib tunduda keeruline, eriti kui sul puudub varasem kokkupuude serverite, domeenide või veebidisainiga. Zone – Eesti juhtivaid...

Partner soovitab: Kuidas kirjutada tõhusaid e-kirju ehk juhend meiliturundusega alustajale

Smaily
Meiliturundus annab tiheda konkurentsiga ärimaailmas võimaluse teistest eristuda ja oma kliente kaasata. Kui oled selles valdkonnas alles alustamas,...

Kas Google kaob ehk kuidas AI-optimeerida oma kodulehte ChatGPT-ajastul

Triin
Me peame taas rääkima tehisintellektist. Täpsemalt AI-st kui otsingumootorist ja sellest, kuidas see mõjutab sinu ettevõtet. Kuigi ligi 90% ettevõtetest...