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

Xdebug seadistamine Zone veebimajutuses: PhpStorm

Xdebug seadistamine Zone veebimajutuses: PhpStorm

Arne Meier
Varasemalt on Zone blogis olnud juttu Xdebug kasutamisest nii Sublime Texti kui ka Visual Studio Code baasil. Kui eelmised näited käsitlevad seadistamist...
Common Mark Certificate: Rohkem võimalusi e-posti nähtavuse ja turvalisuse tõstmiseks

Common Mark Certificate: Rohkem võimalusi e-posti nähtavuse ja turvalisuse tõstmiseks

Kaarel Urva
CMC ehk Common Mark Certificate võimaldab sinu ettevõttel tõsta oma e-kirjade usaldusväärsust ja nähtavust, kuvades brändi logo otse e-kirjade kõrval...
Partner soovitab: iga meiliturundaja vajab head maandumislehte

Partner soovitab: iga meiliturundaja vajab head maandumislehte

Smaily
Sul on suurepärane toode või teenus. Oled selle reklaamimiseks loonud professionaalse turundusmeili või uudiskirja, kuid tulemusi ei paista? Sageli...
Veebilehe kolimine ilma peavaluta – mabrik.ee leht Zones 10 minutiga

Veebilehe kolimine ilma peavaluta – mabrik.ee leht Zones 10 minutiga

Kas veebi kolimine uude majutusserverisse kõlab sama mõnusalt kui diivani tassimine viiendale korrusele? Tegelikult on see hoopis lihtsam, kui arvata...