Uusi versio PHP:stä on aivan nurkan takana. Mitkä ovat ne uudet toteutukset, joista sinun tulisi tietää? Tutustu tähän artikkeliin ja ota selvää!
PHP 8.2 julkaistaan pian. Ehkä se on versio, joka saa päivityksen PHP 8:aan tuntumaan houkuttelevalta kaikille. Puhutaanpa siitä, mitä kehittäjät voivat odottaa seuraavien versioiden kanssa. PHP 8.2 ja valmistautua sen uusimpaan versioon. Käydään kuitenkin ensin nopeasti läpi kaikki PHP-versiot ja muutokset vuosien varrella.
Yleiskatsaus aiempiin versioihin
PHP 7.4
Tyypilliset ominaisuudet
Nuolitoiminnot
Rajoitettu paluutyypin kovarianssi ja argumenttityypin kontravarianssi.
Nollaa sulauttava osoitusoperaattori
Pakkauksen purkaminen matriisien sisällä
Mukautettu objektien sarjallistaminen
PHP 8.0
Marraskuussa 2020 julkaistu PHP 8.0 toi meille parhaat ominaisuudet, joihin kuuluvat:
Nimetyt argumentit
Attribuutit
Konstruktorin ominaisuuden edistäminen
Unionin tyypit
Match-ilmaus
Nullsafe-operaattori
PHP 8.1
Luetelmat
Vain luku Ominaisuudet
Ensimmäisen luokan kutsuttava syntaksi
Uutta initiaattoreissa
Puhtaat risteystyypit
Kuidut
PHP 8.2
PHP 8.2 sisältää uusia muutoksia, joiden tarkoituksena on helpottaa kehittäjän elämää ja optimoida hänen työtään entisestään. Alla on luettelo uusista ominaisuuksista.
Vain luku luokat
Yksi suurimmista parannuksista PHP:n uudessa versiossa on mahdollisuus luoda suoraan readonly
luokka. Luokka, joka on kuvattu tällä ominaisuudella, levittää sen automaattisesti muuttujiinsa. DTO-luokat näyttävät nyt siisteiltä ja puhtailta!
Dynaamisten ominaisuuksien poistaminen käytöstä
Toinen suuri muutos on dynaamisten muuttujien poistaminen luokista. Seuraava toteutus heittää deprecationin osoitteessa PHP 8.2 ja ErrorException
PHP:n tulevassa versiossa.
On syytä mainita, että luokat, jotka toteuttavat __get
ja __set
menetelmiä ja luokkia, jotka periytyvät suoraan stdClass
voi silti toteuttaa taikamenetelmiä ilman esteitä.
Viittaan tässä yhteydessä myös mielenkiintoinen säie GitHubissa, jossa PHP-CS:n kehittäjät keskustelevat tästä muutoksesta ja tarpeesta muuttaa suosittua työkalua kielen uutta versiota varten.
Viimeisenä mutta ei vähäisimpänä, voit poistaa tämän käyttäytymisen käytöstä huomautuksen avulla.
Uudet itsenäiset tyypit: null
, true
ja väärä
Tähän asti funktiot, jotka palauttivat aina true
tai väärä
arvo oli kuvattava bool
tyyppi.
Tästä lähtien voimme käyttää true
ja väärä
yksinkertaisina tyyppeinä funktioiden palautetuissa arvoissa.
Disjunktiivisen normaalimuodon tyypit
(DNF) on vakiintunut tapa järjestää boolean-lausekkeet. Tarkemmin sanottuna se tarkoittaa boolean-lausekkeen jäsentämistä AND-sarjoiksi. Kun sitä sovelletaan tyyppi-ilmoituksiin, se mahdollistaa standarditavan kirjoittaa yhdistettyjä Union- ja Intersection-tyyppejä, joita jäsentäjä voi käsitellä.
Se on suuri muutos, sillä nyt meillä voi olla esimerkiksi nollattavia leikkaustyyppejä:
Vakiot ominaisuuksissa
En ole Traitien käytön suuri kannattaja, ja tällainen muutos on minusta puhtaasti kosmeettinen, varsinkin kun se ei salli Trait-arvojen käyttöä ilman objektin alustamista.
Parametrien salaaminen jälkikäteen tehdyissä jäljityksissä
Yksi tärkeimmistä muutoksista, jota odotan innolla. PHP:n uusimmassa versiossa voimme merkitä muuttujat seuraavasti SensitiveParameterValue
. Miksi meidän pitäisi?
PHP:n poikkeusten pinojäljet ovat erittäin hyödyllisiä virheenkorjauksessa, mutta niiden avulla voit kuitenkin esikatsella parametrien arvoja. Kuvitellaan esimerkiksi, että PDO koodi jota käytetään yhteyden muodostamiseen tietokantaan. Vianmääritysjälki näyttää seuraavalta:
Annotationin käytön jälkeen #[SensitiveParameter]
pinojälkemme ei enää näytä muuttujan arvoa.
Hae enumien ominaisuudet const-lausekkeissa
Kuten kirjoittaja sanoo
, tämän muutoksen ensisijainen motivaatio on sallia nimi- ja arvo-ominaisuuksien nouto paikoissa, joissa enum-oliot eivät ole sallittuja, kuten array-avaimissa. Voisimme käsitellä matriiseja niin, että ne voitaisiin laajentaa sallimaan enumien tai kaikkien objektien käyttö avaimina, mutta enumien ominaisuuksien noutaminen on yksinkertaisempaa.
Päivämäärän funktioiden paluutyypit
Aiemmin staattiset menetelmät toimivat näin:
Osoitteessa PHP 8.2 se muutetaan seuraavasti:
Tämä on rikkova muutos kirjastojen luojille ja/tai kaikille DateTimen mukautetuille toteutuksille.
Poistetaan ja poistetaan `utf8_encode` ja `utf8_decode`.
Ne olivat kaksi toimintoa, jotka eivät palvelleet sitä tarkoitusta, koska ne vain muunnetaan välillä ISO-8859-1
ja UTF-8
. PHP-käsikirja suosittelee käyttämään mb_convert_encoding
sen sijaan.
Paikkariippumaton tapauksen muuntaminen
RFC:n kirjoittaja kuvaa parhaiten paikallisherkkyyttä:
Ennen PHP 8.0:a PHP:n paikallisalue asetettiin ympäristöstä. Kun käyttäjä asentaa Linuxin, se kysyy, millä kielellä haluat sen olevan. Käyttäjä ei ehkä täysin ymmärrä tämän päätöksen seurauksia. Se ei ainoastaan aseta käyttöliittymän kieltä sisäänrakennetuille komennoille, vaan se myös muuttaa läpileikkaavasti sitä, miten merkkijonojen käsittely C-kirjastossa toimii. Esimerkiksi käyttäjä, joka Linuxia asentaessaan valitsee "Turkish" (turkki), huomaa, että sovellukset, jotka kutsuvat toupper('i') -komentoa, saavat tulokseksi pistemäisen ison I-kirjaimen (U+0130, "İ").
Standardoitujen tekstipohjaisten protokollien aikakaudella luonnollinen kieli on vähemmistösovellus tapausten muuntamisessa. Mutta vaikka käyttäjä haluaisikin luonnollisen kielen isojen ja pienten kirjainten muuntamista, hän tuskin onnistuisi siinä strtolower():n avulla. Tämä johtuu siitä, että se käsittelee merkkijonon yksi tavu kerrallaan ja syöttää jokaisen tavun C-kirjaston tolower()-funktiolle. Jos syötteenä on UTF-8, joka on ylivoimaisesti suosituin nykyaikainen valinta, strtolower() vääristää merkkijonon ja tuottaa tulosteeksi yleensä virheellisen UTF-8:n.
PHP 8.0 lakkasi kunnioittamasta locale-ympäristömuuttujia. Lokaalina on siis aina "C", ellei käyttäjä nimenomaisesti kutsu setlocale() -ohjelmaa. Tämä tarkoittaa, että suurin osa taaksepäin yhteensopivista muutoksista on jo takana. Kaikki sovellukset, jotka ovat riippuvaisia järjestelmälokaaleista tehdessään vanhojen 8-bittisten merkistöjen muunnoksia, olisivat menneet rikki PHP 8.0:ssa.
Se tarkoittaa, että kaikki alla olevat toiminnot tekevät ASCII-kirjainten muunnoksen PHP.8.2:sta:
strtolower
, strtoupper
, stristr
, stripos
, strripos
, lcfirst
, ucfirst
, ucwords
, str_ireplace
Poistaa ${} merkkijonojen interpoloinnin käytöstä.
Meillä on PHP:ssä monia tapoja upottaa muuttujia merkkijonoihin:
- Muuttujien suora upottaminen ("$foo")
- Muuttujan ulkopuolella olevat sulkeet ("{$foo}")
- Suluissa dollarimerkin jälkeen ("${foo}").
- Muuttujamuuttujat ("${expr}", vastaa (merkkijonoa) ${expr})
Sekaannusten ja väärinkäytösten välttämiseksi nämä eivät enää toimi:
Yhteenveto
Nämä eivät ole kaikki muutokset, jotka PHP 8.2 tarjoaa meille. Valitettavasti emme vieläkään saaneet tukea geneerisille tyypeille, sillä Nikitan sanojen mukaan monomorfisoidut geneeriset tyypit lisäisivät liikaa suorituskykyä, ja reifioidut geneeriset tyypit vaativat monia muutoksia koko koodipohjaan. Huomattavaa on kuitenkin kurinalaisuus ja näkemys, jonka mukaan tuote. Kielen peräkkäisissä versioissa tehdyt muutokset ovat yhä selkeämpiä, ja kiinnostuneet huomaavat, että PHP on menossa oikeaan suuntaan sekä syntaksin yksinkertaistamisen että uutuuksien tukemisen suhteen. Odotan, että jo ensi vuonna näemme seuraavat asiat kutsuttava
kelvolliseksi tyypiksi.
