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

Surve aegunud PHP-le on parandanud Eesti interneti turvalisust

Kaarel Urva
Zone käivitas sel aastal programmi, mille eesmärk on suunata kliente aegunud PHP-tarkvara uuendama, et vähendada turvariske, mis kaasnevad pärandtarkvara...

PHP 8.4 nüüd ametlikult väljas

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

Zone+ AI Assistent nüüd veelgi targem

Ingmar Aasoja
Zone+ AI Assistent WordPressile on leidnud kasutust juba lugematute kodulehtede ehitamisel. Hiljuti saabus uuendus, mis annab rohkem valikuid nii uue lehe...

Täpitähtedega domeen sinu brändi teenistuses

Ants Korsar
Kaasaegses digimaailmas on domeeninimed brändi identiteedi olulised nurgakivid. Sinu domeeninimi on esimene asi, millega potentsiaalne klient veebis kokku...