PHP 8.2 nüüd ametlikult väljas

Ingmar Aasoja
RSS: Jaga:

Meie blogi tähelepanelikum lugeja teab, et Zones on olnud võimalik PHP uusimat versiooni 8.2 testida juba mõnda aega alatest selle beetaversioonist. Eilsest ehk 8. detsembrist on PHP 8.2 väljunud release candidate staatusest ning on ametlikult väljas. Selle reliisiga on astutud järjekordselt suur samm edasi PHP eelkäsitluskeele arengus. Alljärgnevalt keskendumegi olulisimatele muutustele.

Vähem peavalu uute PHP versioonidega

Readonly klassid

Kui alates versioonist 8.1 oli võimalik määrata klassi property’d ainult loetavaks, siis nüüd on võimalik seda teha globaalselt tervele klassile.

Varem:

class Person
{
    public readonly string $name;

    public readonly int $age;

    public function __construct(string $name, int $age)
    {
        $this->age = $age;
        $this->name = $name;
    }
} Code language: PHP (php)

Alates versioonist 8.2:

readonly class Person
{
    public string $name;

    public int $age;

    public function __construct(string $name, int $age)
    {
        $this->age = $age;
        $this->name = $name;
    }
} Code language: PHP (php)

DNF (Disjunctive Normal Form) tüübid

Tähelepanuväärne on see, et viimaste versioonidega on PHP tüübisüsteem arenenud vägagi hoogsalt. Lisaks varasemalt lisandunud union- ehk ühistüüpidele on tüüpe võimalik nüüd siduda ka tingimustega. Kui varem ei olnud võimalik sisendina näiteks määrata, et muutuja peab implementeerima mitut interface’i, siis nüüd on see tehtud võimalikuks. Muidugi toimub nüüd see ka kõikide tüüpidega.

class Race { 
    public function register((Car&OffRoad)|null $vehicle)
    {
        //... 
    } 
} Code language: PHP (php)

null, false ja true eraldi tüübina

Lisaks täiendasid PHP arendajad olemasolevat tüübisüsteemi eranditega, mis tegelikult määravad väärtust.

class MyValue
{
    public function iAmFalse(): false {/**/}

    public function iAmTrue(): true {/**/}

    public function iAmNull(): null {/**/}
}Code language: PHP (php)

Konstandid trait’ides

Alates versioonist 8.2 on võimalik konstante kasutada ka trait’ide sees. Lubatud on neid siiski kasutada ainult klassis, mis kasutab trait’i ning ainult klassi enda nimega.

trait Something {
    public const SOMEVALUE = 1;
} 

class Someone {
    use Something;
} 

var_dump(Someone::SOMEVALUE) // 1Code language: PHP (php)

Dünaamiliste property‘te deprekeerimine

Lisaks on alates versioonist 8.2 vigade ja bugide vältimiseks deprekeeritud dünaamilised property’d. Erandiks on sisse ehitatud klass stdClass. See muutus ei mõjuta __get ja __set maagilisi meetodeid. Sellest on nüüd võimalik ka mööda minna, kui määrata klassile samuti uues versioonis lisandunud atribuut
#[\AllowDynamicProperties].

Tähelepanu võib pöörata sellelegi, et vastavalt plaanitule pole alates PHP versioonist 9.0 dünaamilised property’d enam lubatud.

Varem:

class Vehicle
{
    public $ction;
}

$vehicle = new Vehicle();
$vehicle->action = 'Drive';Code language: PHP (php)

Alates versioonist 8.2:


class Vehicle
{
    public $ction;
}

$vehicle = new Vehicle();
$vehicle->action = 'Drive';  // NOTICE

$vehicle = new stdClass();
$vehicle->last_name = 'Drive'; // lubatud

#[\AllowDynamicProperties]
class Vehicle
{
    public $ction;
}

$vehicle = new Vehicle();
$vehicle->action = 'Drive';  // samuti lubatudCode language: PHP (php)

SensitiveParameter atribuut

Lisandunud on ka kauaoodatud SensitiveParameter atribuut, mis annab võimaluse peita exceptionite trace‘st ära väärtused, mida ei tohiks kuhugi salvestada. See välistab olukorra, kus salasõnad ja tokenid on küll ise räsitud, aga need lekivad siiski teksti kujul näiteks logidesse.

function doSomeQueryWithSecret (
    #[\SensitiveParameter]
    string $password,
    string $username
){
    throw new Exception('Error!'); 
} Code language: PHP (php)

Kui varem ei olnud $password väärtus trace’s peidetud, siis nüüd asendatakse see väärtusega object(SensitiveParameterValue).

try {
    doSomeQueryWithSecret('iamreallysecret', 'iamnot')
} catch (Exception $e) {
    echo $e;
} 

/*
Stack trace:
#0 example.php(19): doSomeQueryWithSecret('iamreallysecret', 'iamnot')
#1 {main}
*/

// SensitiveParameter atribuudi korral

/*
Stack trace:
#0 example.php(19): doSomeQueryWithSecret(object(SensitiveParameterValue), 'iamnot')
#1 {main}
*/Code language: PHP (php)

Lisandunud featuure ja ühtlasi deprekeeritut on uues versioonis rohkesti. Täpsema ülevaate kõikidest muutustest saab PHP ametlikult saidilt.

Samuti tuletame siinkohal meelde üht olulist featuuri seoses Zone teenustega: kui sul on soov PHP 8.2 kohe kasutusele võtta, siis saad oma veebilehe funktsionaalsust testida uue versiooniga eelnevalt oma brauseris, ilma et peaksid selleks serveri seadeid muutma. Sellest oli juttu ka meie varasemas blogipostituses “Vähem peavalu uute PHP versioonidega”.

Populaarsed postitused

Partner soovitab: turvapluginast üksi ei piisa

Partner soovitab: turvapluginast üksi ei piisa

Kui sul on WordPressi veebileht, siis oled üsna tõenäoliselt paigaldanud ka mõne turvaplugina. Tavaliselt on see üks esimesi samme veebilehe kaitsmisel...
Kliendi edulugu: kuidas tehisintellekt viis mesilasvahaküünlad maailma

Kliendi edulugu: kuidas tehisintellekt viis mesilasvahaküünlad maailma

Rauno Kais
Mõnikord sünnivad parimad äriideed täiesti juhuslikult. Selle loo algus peitub mesilasvahas, käsitööarmastuses ja tütre soovis teha oma emale jõulukingitus,...
Kliendi edulugu: Motorock – koht, kus stiil, tsiklid ja vabadusetunne kokku saavad

Kliendi edulugu: Motorock – koht, kus stiil, tsiklid ja vabadusetunne kokku saavad

Nikita Tikhomirov
Mõned lood algavad suure äriplaani, põhjaliku turuanalüüsi ja kümnete Exceli tabelitega. Motorocki lugu algas palju inimlikumalt: Motorocki eestvedajal...
Partner soovitab: privaatsusteavitus – rohkem kui lihtsalt linnuke

Partner soovitab: privaatsusteavitus - rohkem kui lihtsalt linnuke

Veebilehe privaatsusteavitus ei ole pelgalt kohustuslik tekst kuskil jaluses, vaid oluline osa ettevõtte usaldusväärsusest. Kui küpsised, kontaktvormid,...