PHP 8.4 on virallisesti julkaistu – on aika ottaa se käyttöön
Marraskuun lopussa julkaistiin PHP:n versio 8.4. Zonen asiakkaat ovat voineet testata uuden sukupolven PHP:tä aiempien julkaisujen kanssa: beta-versioista release candidate-versioihin, mutta nyt myös lopullinen versio on palvelimillamme kaikkien saatavilla. Tässä on lyhyt katsaus uusimman version päivityksiin ja ominaisuuksiin.
Olion alustus ilman sulkeita
Vaikka tämä onkin koodaajille pikemmin kosmeettinen uudistus, olion käyttöönotto alustuksen jälkeen helpottuu. Uuden olion luokan nimeä ei enää tarvitse laittaa sulkeisiin.
PHP 8.3
(new Class())->someFunction();
Code language: PHP (php)
PHP 8.4
new Class()->someFunction();
Code language: PHP (php)
Property hooks
Monista ohjelmointikielistä tuttua syntaksia, joka auttaa koodaajia kuvailemaan luokkia hieman siistimmin ja joissain tapauksissa vähentämään turhilta tuntuneiden getterien ja setterien käyttöä.
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'); // error
Code 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'; // error
Code language: PHP (php)
Epäsymmetrinen näkyvyys
Samoin kuin edellä, epäsymmetrinen näkyvyys auttaa puhdistamaan koodin turhista tarkistuksista ja niistä johtuvista gettereistä ja settereistä.
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–attribuutti
On lisätty mahdollisuus asettaa jokin funktio tai metodi vanhentuneeksi (deprecated) siten, että se tunnistetaan samalla tavalla kuin PHP:n sisäiset vanhentumiset, lisäämällä asianmukaiseen funktioon tai metodiin Deprecated-attribuutti.
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 warning
Code 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-kehittäminen ja HTML5-tuki
Uusi DOM API lisää standardien mukaisten HTML5-dokumenttien jäsentämisen tuen. Lisäksi se korjaa taustalla useita virheitä, jotka vaikuttivat DOM-toimintoihin. Jotta mikään ei rikkoudu takautuvasti, uusi API käyttää Dom
-nimiavaruutta. Vastaavat objektit voidaan alustaa luokilla Dom\HTMLDocument
ja Dom\XMLDocument
. Teknisestä puolesta voidaan vielä mainita, että se perustuu tähänastisen libxml-kirjaston sijaan uuteen kirjastoon nimeltä Lexbor. Niille, jotka ovat hieman enemmän kiinnostuneita tällaisista muutoksista, on myös yksityiskohtaisempi blogikirjoitus
BCMath Object API
Niille, jotka kirjoittavat koodia, jossa luvuilla on suuri merkitys (esimerkiksi valuutan muuntosovelluksessa), PHP:n uusi versio tarjoaa mahdollisuuden lähestyä lukuja olioina.
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); // false
Code language: PHP (php)
Uudet array_*-funktiot
Tähän asti taulukoiden (array) käsittely ilman ohjelmistokehyksen tai lisäpaketin asentamista vaati joissakin tapauksissa paljon ylimääräistä työtä, mutta nyt PHP tarjoaa tätä varten uusia sisäänrakennettuja toimintoja:
array_find(),
array_find_key(),
array_any(),
ja array_all().
Suosittelemme, että otat PHP 8.4:n käyttöön mahdollisimman pian
Edellä mainittujen lisäksi on monia muitakin uusia asioita, joita ei voi mainita tässä ja joista voit lukea lisää PHP:n verkkosivuilta. Kuten yleensä, tässäkin versiossa joitakin toimintoja on poistettu käytöstä, joten ennen version päivittämistä kannattaa varmistaa, että niitä ei ole enää käytössä.
Kannustamme sinua kokeilemaan, toimiiko sivustosi jo uudella PHP-versiolla, ja ottamaan uusi versio käyttöön, jos mahdollista. Jos haluat, että päivitämme PHP-version jatkossa puolestasi, suosittelemme, että asetat My Zone -palvelun kautta verkkosivustollesi PHP-päivitysstrategian.
Uuden version myötä tarkistammekin PHP-versioiden strategioita. Pian PHP päivittyy versioon 8.3 niillä, jotka käyttävät Zone Recommended -strategiaa. WordPress-strategiaa käyttävillä PHP:n versioksi jää vielä 8.2, koska version 8.3 tuki on WordPressin kehittäjien mielestä vielä beta-tilassa. Strategiasta johtuvista versiomuutoksista ilmoitamme asiakkaillemme etukäteen sähköpostitse.