Ukukhutshwa kweNdumiso 3.12, umhlalutyi omileyo wolwimi lwe-PHP. Ukukhutshwa kwe-Alpha ye-PHP 8.0

Inkampani yeVimeo ipapashiwe ukukhutshwa okutsha kwe-static analyzer INdumiso 3.12, ekuvumela ukuba uchonge zombini iimpazamo ezicacileyo kunye nezifihlakeleyo kwikhowudi ye-PHP, kunye nokulungisa ngokuzenzekelayo ezinye iintlobo zeempazamo. Inkqubo ifanelekile ukuchonga iingxaki zombini kwikhowudi yelifa kunye nekhowudi esebenzisa iimpawu zangoku eziziswe kumasebe amatsha e-PHP. Ikhowudi yeprojekthi ibhalwe kwi-PHP kunye isasazwa ngu phantsi kwelayisenisi ye-MIT.

INdumiso ichonga uninzi lweengxaki ezinxulumene nokusetyenziswa kohlobo olungachanekanga, kunye nezahlukeneyo iimpazamo eziqhelekileyo. Umzekelo, ixhasa izilumkiso malunga nokuxuba okuguquguqukayo kweentlobo ezahlukeneyo kwintetho, iimvavanyo ezinengqiqo ezingachanekanga (ezifana ne "ukuba ($a && $a) {}", "ukuba ($a && !$a) {}" kunye " ukuba ( $a) {} elseif ($a) {}"), ukuqaliswa okungaphelelanga kweepropati zento. I-analyzer isebenza kwimodi enemisonto emininzi. Kuyenzeka ukuba wenze iskena esongezelelekileyo, esihlalutya kuphela iifayile ezitshintshileyo ukusuka kuvavanyo lokugqibela.

Ukongeza, izixhobo zokucwangcisa ezikhuselekileyo zinikezelwe ukuvumela se benzisa amanqakwana kwifomathi Docblock (“/** @var Uhlobo */”) ukunika ulwazi malunga neentlobo eziguquguqukayo, ukubuyisela amaxabiso, iiparamitha zokusebenza, iipropati zento. Ukuchaza iipatheni zokusetyenziswa kohlobo kunye nokusetyenziswa kweengxelo ze-assert nako kuyaxhaswa. Umzekelo:

/** @var umtya|null */
$a = foo();

/** @var umtya $a */
echo strpos($a, 'molo');

/** @indumiso-assert-ukuba-yinyani B $a */
umsebenzi isValidB(A $a) : bool {
buyisela i-$a exampleof B && $a->isValid();
}

Ukuzenzekelayo ukupheliswa kweengxaki ezifunyenweyo, uncedo lwePsalter lunikezelwa, oluxhasa iiplagi kunye it ivumela lungisa iingxaki zekhowudi eqhelekileyo, yongeza uhlobo lwezichasiselo, kwaye wenze ubuqhophololo obunjengokuhambisa iiklasi ukusuka kwindawo yamagama ukuya kwenye, ukuhambisa iindlela phakathi kweeklasi, kwaye uthiya ngokutsha iiklasi kunye neendlela.

Kwinkupho entsha yeNdumiso iphunyeziwe "--tant-analysis" ukhetho likuvumela ukuba ulandele umkhondo phakathi kweparameters zongeniso ezifunyenwe kumsebenzisi (umzekelo, $_GET['igama']) kunye nokusetyenziswa kwazo kwiindawo ezifuna ukubaleka umlinganiswa (umzekelo, echo " $igama "), kubandakanywa nokulandelela amakhonkco ezabelo eziphakathi kunye neefowuni zokusebenza. Ukusetyenziswa kwee-associative arrays $_GET, $_POST kunye $_COOKIE ithathwa njengemithombo yedatha enokuba yingozi, kodwa kuyenzeka inkcazo imithombo yakho. Izenzo ezifuna ukulandelwa kokubaleka ziquka imisebenzi yemveliso eyenza umxholo weHTML, ukongeza iiheader zeHTTP, okanye uphumeze imibuzo yeSQL.

Ukuqinisekisa kusetyenziswa xa usebenzisa imisebenzi efana ne-echo, exec, bandakanya kunye neheader. Xa uhlalutya imfuno yokubaleka, iintlobo zedatha ezifana nokubhaliweyo, iintambo kunye ne-SQL, i-HTML kunye nekhowudi ye-Shell, iintambo ezineeparamitha zokuqinisekisa zithathelwa ingqalelo. Indlela ecetywayo ikuvumela ukuba uchonge ubuthathaka kwikhowudi ekhokelela kushicilelo lwesiza esinqamlezileyo (XSS) okanye endaweni yeSQL.

Ukongezelela, kunokuqatshelwa isiqalo uvavanyo lwe-alpha yesebe elitsha le-PHP 8.0. Ukukhutshwa kucwangciselwe i-26 kaNovemba. Oku kulandelayo kulindeleke kwisebe elitsha: ezintshabathanda:

  • Amandla Umqambi weJIT, ukusetyenziswa okuya kuphucula imveliso.
  • inkxaso iintlobo zomanyano, ichaza ingqokelela yeentlobo ezimbini nangaphezulu (umzekelo, “umsebenzi woluntu foo(Foo|Bar $input): int|float;”).
  • inkxaso iimpawu (izichasiselo) ezikuvumela ukuba ubophe imetadata (efana neenkcukacha zohlobo) kwiiklasi ngaphandle kokusebenzisa i-Docblock syntax.
  • Isivakalisi esifutshane iinkcazo zeklasi, ezikuvumela ukuba udibanise inkcazo yomakhi kunye neempawu.
  • Uhlobo olutsha lokubuya - static.
  • Uhlobo olutsha - zixutywe, enokusetyenziswa ukumisela ukuba umsebenzi wamkela iiparameters zeentlobo ezahlukeneyo.
  • Inkcazo ukuphosa ukusingatha iinketho.
  • I-WeakMap ukudala izinto ezinokubingelelwa ngexesha lokuqokelela inkunkuma (umzekelo, ukugcina ii-caches ezingadingekile).
  • Ithuba usebenzisa ibinzana elithi "::class" kwizinto (ezifana nokubiza get_class()).
  • Ithuba iinkcazo kwibhloko yokubamba yezinto ezingaphandle ezingabotshwanga kwizinto eziguquguqukayo.
  • Ithuba kushiya isiphumlisi emva kwento yokugqibela kuluhlu lweparameters zomsebenzi.
  • Ujongano olutsha Iqinile ukuchonga naluphi na uhlobo lomtya okanye idatha enokuthi iguqulelwe kumtya (apho __toString () indlela ekhoyo).
  • Inqaku elitsha str_iqulathe (), i-analogue eyenziwe lula ye-strpos yokumisela ukwenzeka komtya ongezantsi, kunye nemisebenzi str_starts_with() kunye str_ends_with() yokukhangela imatshisi ekuqaleni nasekupheleni komtya.
  • Umsebenzi ongezelelweyo fdiv(), eyenza umsebenzi wokwahlula ngaphandle kokuphosa impazamo xa isahlulahlula ngo-zero.
  • Itshintshiwe ingqiqo yokudibanisa umtya. Umzekelo, ibinzana elithi 'echo "sum:" . I-$a + $b' ngaphambili yayitolikwa njenge-'echo ("sum: " . $a) + $b', kwaye kwi-PHP 8 iya kuphathwa njenge 'echo "sum: " . ($a + $b)'.
  • Iqinisiwe ijonga i-arithmetic kunye nokusebenza kancinci, umzekelo, intetho "[] % [42]" kunye ne "$object + 4" ziya kubangela impazamo.
  • Iphunyeziwe i-algorithm yokuhlela ezinzileyo apho ulandelelwano lwamaxabiso afanayo lugcinwa kwimitsi eyahlukeneyo.

umthombo: opennet.ru

Yongeza izimvo