Verkkotoimisto » Digitaalisia uutisia » Mitä uutta PHPStan 1.0:ssa? - CloudSavvy IT

Mitä uutta PHPStan 1.0:ssa? - CloudSavvy IT

PHPStan otti tärkeän askeleen marraskuun 2021 alussa uusilla ominaisuuksilla, lisäsäännöillä ja lukuisilla suorituskyvyn optimoinnilla. Tämä tarkoittaa, että PHP:n staattista pääanalysaattoria pidetään nyt vakaana ja sen mukana tulee lupaus taaksepäin yhteensopivuudesta tulevia päivityksiä varten.

Koska tämä on suuri ongelma, PHPStan 1.0 tekee myös joitain häiritseviä muutoksia, jotka voivat vaikuttaa olemassa oleviin tarkistuksiin. Näitä ovat lisäsäännöt ja jotkin korvatut tai poistetut kokoonpanoasetukset.

Uusi taso 9

PHPStan skannaa PHP-lähteesi mahdollisten ongelmien varalta suorittamatta itse koodia. Yksikkö- ja päästä päähän -testauksen ohella tämä antaa sinulle näkyvyyttä koodisi laadusta näyttämällä ongelmat ennen kuin käyttäjät kohtaavat ne.

PHPStan-tasoja käytetään analysaattorin tiukkuuden määrittämiseen. V0.x-julkaisusarja tarjosi kahdeksan tasoa, joista 0 on rennoin ja 8 tiukinta. Vaikka on parasta käyttää tiukinta mahdollista tasoa parhaan kattavuuden saavuttamiseksi, vähemmän tiukat tasot voivat auttaa sinua puristamaan PHPStanin epätäydelliseen koodikantaan.

PHPStan 1.0 lisää tason 9 uutena vaihtoehdona. Se sisältää kaikki säännöt tasolta 8 ja sitä alempana sekä lisätarkistuksen: tiukka mixed tyyppivertailuja.

Les mixed type saapui PHP 8.0:aan tapana kirjoittaa "mikä tahansa" arvo. Kuten mixed vastaa olennaisesti kirjoittamatonta arvoa, on vaarallista tehdä oletuksia siitä, mitä a mixed-tyypin arvo näyttää.

PHPStanin yhdeksäs taso valvoo tätä tiukasti ilmoittamalla virheestä, jos yrität käyttää aktiivisesti mixed arvo koodissasi. Omaisuuden käyttäminen tai menetelmän kutsuminen ei ole sallittua, koska et voi tietää, ovatko ne olemassa. Voit välittää arvoja vain muiden kautta mixed-tyyppiset vihjeet, kun tämä sääntö on aktiivinen.

Jos haluat aktivoida uuden toiminnan, sinun on muokattava level: 8 à level: 9 sinun phpstan.neon asetustiedosto. PHPStan tukee myös level: max huipputason aliaksena. Jos käytät jo max, saat automaattisesti tason 9, kun päivität PHPStan 1.0:aan.

Parempi tietoisuus Try-Catch-Finally-lohkoissa

PHPStanilla on nyt parempi tyyppipäätelmä ja tieto muuttujista try-catch-finally -lohkoille. Hän tulee käyttämään @throws docblock tarkistaaksesi kunkin koodikannan funktion aiheuttamat poikkeukset. Tätä ymmärrystä käytetään tiedottamaan muuttuvan saatavuuden tarkistuksista try-catch-lohkoissa.

Tässä on esimerkki siitä, miksi tämä on tärkeää:

/ ** * @heittää DemoExceptionin * /
toiminto ensimmäinen() {
    heittää DemoException();
}
 
/ ** * @heittää OtherExceptionin * /
toiminto toinen() {
    heittää MuuPoikkeus();
}
 
yrittää {
    $ ensin = ensimmäinen();
    $ sekunti = toinen();
}
saalis (DemoException $ ex) {
    error_log($ sekunti);
}
saalis (Poikkeus $ ex) {
    error_log("Yleinen poikkeus");
}

Ensimmäinen catch pääsy blogiin $second mutta sitä ei ole olemassa silloin DemoException on vangittu. PHPStan v1.0 käyttää @throws lausunto tämän saavuttamiseksi, jotta saat tiedon, kun catch lohkot viittaavat mahdollisesti määrittelemättömiin muuttujiin. Toimii ilman @throws huomautukset toimivat yleensä samalla tavalla kuin ennenkin.

Tämän muutoksen seurauksena vaihtoehto polluteCatchScopeWithTryAssignments parametri on poistettu. Näin voit käyttää kohdassa a määriteltyjä muuttujia try lohko seuraavassa catch; tämä ei ole enää tarpeen, koska PHPStan voi nyt määrittää, mitkä muuttujat ovat käytettävissä.

Käyttämättömän koodin tunnistus

PHPStan on parantunut löytämään ja raportoimaan tietyt käyttämättömät koodit projektissasi. Se korostaa yksityisen luokan ominaisuuksia, menetelmiä ja vakioita, joita ei koskaan kutsuta tai kuulla.

Heidän läsnäolonsa on lähes aina tahatonta. Jos haluat säilyttää kuolleen koodin pidempään, voit yrittää kommentoida tai lisätä koodin @phpstan-ignore-next-line kommentti ohittaaksesi ohjauksen.

Parannuksia tallennettuihin arvoihin

V1.0 parantaa PHPStanin muistin yhtenäisyyttä funktioiden palautusarvoille. Se pystyy paremmin ymmärtämään, milloin funktiota kutsutaan toisen kerran, mikä tarjoaa paremman ennakoinnin identtisille palautusarvoille.

Tämä johtaa parempaan kuolleen koodin havaitsemiseen, kun ehto toistetaan useita kertoja. PHPStan varoittaa, kun lohkosta tulee tarpeeton, koska suorituksen lopettaa aikaisempi haara, jolla on sama ehto:

if ($ demo -> on aktiivinen()) {
    palata;
}
 
if ($ demo -> on aktiivinen()) {
    RecordDemoActivity();
}

Toista lohkoa ei koskaan suoriteta, koska ensimmäinen päättyy aina. Pelissä on kuitenkin veikkaus: isActive() on aina palautettava même arvoa koko käyttöiän ajan $demo. Tarkemmin sanottuna, isActive() on oltava puhdas toiminto, jossa toistuvat tulot tuottavat aina saman tulosteen.

PHPStan olettaa, että funktiot ovat oletuksena puhtaita. Jos niitä ei ole, voit lisätä @phpstan-impure huomautus dokumenttilohkossa funktion määritelmän yläpuolella. Tämä poistaa käytöstä palautusarvon muistin kyseiselle funktiolle. Sinun on käytettävä sitä yllä olevassa esimerkissä, jos isActive() saattaa palauttaa eri arvon jokaisessa puhelussa, mikä tarkoittaa, että ensimmäinen tarkistus saattaa olla yhtä suuri false ja anna toisen haaran kulkea.

/ ** @ phpstan-epäpuhdas * /
julkinen toiminto on aktiivinen() : Bool {
    palata (data("Y") === "2021");
}

Muita sääntöparannuksia

Nykyisille tasoille 1–6 on lisätty useita uusia sääntöjä. Näitä ovat vakioiden ja korvausominaisuuksien tarkistukset, yrittäen laajentaa a final luokka ja aina tosi ja aina väärän havaitseminen while silmukan olosuhteet.

Tyypit tarkistetaan nyt rekursiivisesti puuttuvien tyyppien varalta. Tämä tarkoittaa, että PHPDoc-määritykset pitävät array<array> ei hyväksytä, koska niillä ei ole sisäistä tyyppimäärittelyä. Sinun on myös syötettävä toisen tason taulukon elementtien odotusarvot, kuten array<array<string>>.

Lähdesisällön tarkistamisen lisäksi PHPStan 1.0 tutkii sisällön yleisen kelvollisuuden .php myös tiedostot. Taso 0 tarkistaa välilyönnit sekä alku- ja lopputiedostojen nimikkeistöt hajamerkkeinä ennen tai jälkeen <?php ... ?> Tunnistepari voi aiheuttaa odottamattoman poistumisen suorituksen aikana.

Suorituskyky ja vakaus

Suorituskykyä on parannettu useilla alueilla optimoimalla tiettyjä toimintoja ja korjaamalla joitain muistivuotoja. Näiden pitäisi edistää suurempien koodikantojen nopeampaa ja luotettavampaa analysointia.

Koska versiota 1.0 pidetään muodollisesti vakaana julkaisuna, sen mukana tulee varmuus siitä, että tulevat pienet versiot (1.1, 1.2, 1.3 jne.) ovat taaksepäin yhteensopivia. Vaikka siirtyminen versiosta 0.x v1.0:aan saattaa vaatia joitain konfiguraatiomuutoksia, sinulla on helpompi siirtopolku tulevaisuudessa.

PHPStan-laajennusten ja mukautettujen sääntöjoukkojen kehittäjät hyötyvät myös vakaammasta koodikannasta, joka on vähemmän herkkä muutoksille. Kehittäjien dokumentaatiota on myös laajennettu, ja mukautettujen sääntöjen luominen on entistä helpompaa. Sinun pitäisi olla helpompi aloittaa, kun otat tiimisi omat säännöt käyttöön PHPStan-analyysissäsi.

Vaikka tämä lupaa hyvää tulevalle tuelle, käyttäjät ja laajennuskehittäjät kohtaavat suuria muutoksia päivittäessään versioon 1.0. Useita skannauskonfiguraatioparametreja on nimetty uudelleen tai muutettu bootstrap tulla bootstrapFiles et excludes_analyse korvattu excludePaths.

Sisäisesti Extensions API on tarkistettu laajasti, joten monia luokkia ja menetelmiä on muutettu tai poistettu. Täydellinen luettelo taaksepäin yhteensopivista muutoksista on saatavilla v1.0-muutoslokissa.

yhteenveto

PHPStan v1.0 kehittää projektia optimoimalla suorituskykyä, lisäämällä uusia sääntöjä ja korjaamalla joitain havaitsemisvirheitä. PHPStanin kehitys viime vuosien aikana on myötävaikuttanut PHP-yhteisön laajempaan muutokseen omaksumaan kirjoitetut kielen käsitteet. Ominaisuuksien, kuten kirjoitettujen ominaisuuksien ja liitostyyppien, lisääminen on tuottanut kielen, joka pystyy tukemaan edistynyttä ulkoista tarkastusta sekä yksityiskohtaista sisäistä itsetutkiskelua reflektoinnin kautta.

Puolivakaaseen versioon edistämisen pitäisi edistää PHPStanin käyttöönottoa koko yhteisössä. Siirron uuteen versioon pitäisi olla riittävän helppoa nykyaikaisille projekteille, jotka käyttävät jo tiukkaa PHPStan-sääntötasoa.

Voit päivittää PHPStan v1.0:aan tänään suorittamalla composer require phpstan/phpstan projekteissasi. Suosittelemme, että luet ensin julkaisutiedot, jotta voit tunnistaa korjattavat muutokset. Lisäsääntöjen käyttäminen kullakin olemassa olevalla tasolla voi aiheuttaa koodikannan epäonnistumisen testeissä, vaikka se olisi läpäissyt PHPStan v0.x:n. Voit poistaa uudet säännöt väliaikaisesti käytöstä lisäämällä ne perusviivaasi, jotta ne suljetaan pois tarkistustuloksista.

★ ★ ★ ★ ★