Kutulutsidwa kwa Masalimo 3.12, kusanthula kwachiyankhulo cha PHP. Kutulutsidwa kwa alpha kwa PHP 8.0

Kampani ya Vimeo losindikizidwa kutulutsidwa kwatsopano kwa static analyzer Salmo 3.12, zomwe zimakulolani kuti muzindikire zolakwika zoonekeratu komanso zosaoneka bwino mu PHP code, komanso kukonza zolakwika zina. Dongosololi ndi loyenera kuzindikira zovuta zonse mu code ya cholowa komanso mu code yomwe imagwiritsa ntchito zinthu zamakono zomwe zayambitsidwa m'nthambi zatsopano za PHP. Khodi ya polojekitiyi idalembedwa mu PHP ndi wogawidwa ndi pansi pa layisensi ya MIT.

Masalimo amatchula mavuto ambiri okhudzana ndi kugwiritsa ntchito mitundu yolakwika, komanso osiyanasiyana zolakwa zonse. Mwachitsanzo, imathandizira machenjezo okhudza kusakaniza mitundu yosiyanasiyana m'mawu, mayeso olondola olakwika (monga "ngati ($a && $a) {}", "ngati ($a && !$a) {}" ndi " ngati ($a) {} elseif ($a) {}"), kuyambika kosakwanira kwa katundu wa chinthu. The analyzer imayenda mu multi-threaded mode. Ndizotheka kupanga masikelo owonjezera, omwe amasanthula mafayilo okhawo omwe asintha kuyambira pakujambula komaliza.

Kuphatikiza apo, zida zotetezedwa zamapulogalamu zimaperekedwa kuti zilole ntchito ndemanga mu mawonekedwe Docblock (“/** @var Type */”) kuti mupereke zambiri zamitundu yosinthika, mitengo yobweza, magawo a ntchito, katundu wa chinthu. Kufotokozera mitundu yogwiritsira ntchito komanso kugwiritsa ntchito mawu otsimikiza kumathandizidwanso. Mwachitsanzo:

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

/** @var chingwe $a */
echo strpos($a, 'hello');

/** @psalm-assert-ngati-zoona B $a */
ntchito isValidB (A $a): bool {
bwezerani $a exampleof B && $a->isValid();
}

Kuti muthe kuthetseratu mavuto omwe apezeka, Psalter zofunikira zimaperekedwa, zomwe zimathandizira mapulagini ndi timatha thetsani zovuta zamakhodi wamba, yonjezerani zolemba zamtundu, ndikuchita zosintha monga kusuntha makalasi kuchokera kumalo amodzi kupita ku ena, kusuntha njira pakati pa makalasi, ndikusinthiranso makalasi ndi njira.

M’kope latsopano la Masalimo zakhazikitsidwa njira ya "--taint-analysis" imakupatsani mwayi kuti muwone ubale womwe ulipo pakati pa magawo omwe alandilidwa kuchokera kwa wogwiritsa ntchito (mwachitsanzo, $_GET['dzina']) ndikugwiritsa ntchito m'malo omwe amafunikira kuthawa (mwachitsanzo, echo " $dzina "), kuphatikizira kutsata maunyolo apakati ndi ma foni ogwira ntchito. Kugwiritsa ntchito ma associative arrays $_GET, $_POST ndi $_COOKIE amaonedwa ngati magwero a data yomwe ingakhale yowopsa, koma ndizothekanso tanthauzo magwero ake. Zochita zomwe zimafuna kuti anthu azitha kutsata zikuphatikizapo zomwe zimapanga HTML, kuwonjezera mitu ya HTTP, kapena kufunsa mafunso a SQL.

Kutsimikizira kumagwiritsidwa ntchito mukamagwiritsa ntchito monga echo, exec, kuphatikiza ndi mutu. Pofufuza kufunika kothawa, mitundu ya deta monga malemba, zingwe ndi SQL, HTML ndi Shell code, zingwe zokhala ndi zizindikiro zovomerezeka zimaganiziridwa. Njira yomwe mukufuna imakupatsani mwayi kuti muzindikire zovuta zomwe zimatsogolera ku scripting (XSS) kapena SQL m'malo.

Kuphatikiza apo, zitha kuzindikirika woyamba kuyesa kwa alpha kwa nthambi yatsopano ya PHP 8.0. Kutulutsidwa kwakonzedwa pa Novembara 26. Izi zikuyembekezeka ku nthambi yatsopano: zatsopanomonga:

  • Kuthamanga Wopanga JIT, kugwiritsidwa ntchito komwe kumawonjezera zokolola.
  • thandizo mitundu ya mgwirizano, kutanthauza zosonkhanitsidwa zamitundu iwiri kapena kupitilira apo (mwachitsanzo, "public function foo(Foo|Bar $input): int|float;").
  • thandizo makhalidwe (zofotokozera) zomwe zimakulolani kuti mumange metadata (monga mtundu wa chidziwitso) kumakalasi osagwiritsa ntchito mawu a Docblock.
  • Mawu achidule matanthauzo a kalasi, kukulolani kuti muphatikize tanthauzo la omanga ndi katundu.
  • Mtundu watsopano wobwerera - static.
  • Mtundu watsopano - zosakaniza, yomwe ingagwiritsidwe ntchito kudziwa ngati ntchito ikuvomereza magawo amitundu yosiyanasiyana.
  • Kulongosola kuponyera kusamalira zosiyana.
  • WeakMap kupanga zinthu zomwe zitha kuperekedwa nsembe panthawi yotolera zinyalala (mwachitsanzo, kusunga ma cache osafunikira).
  • Mwayi pogwiritsa ntchito mawu akuti ":: kalasi" pazinthu (zofanana ndi kuitana get_class ()).
  • Mwayi matanthauzo mu block block ya zopatula zomwe sizikugwirizana ndi zosintha.
  • Mwayi kusiya koma pambuyo pa chinthu chomaliza pamndandanda wa magawo a ntchito.
  • Mawonekedwe atsopano Wolimba kuzindikira mtundu uliwonse wa zingwe kapena deta yomwe ingasinthidwe kukhala chingwe (yomwe __toString () njira ilipo).
  • Mbali yatsopano str_contains(), analogue yophweka ya strpos kuti mudziwe kupezeka kwa chingwe chochepa, komanso ntchito str_starts_with() ndi str_ends_with() poyang'ana machesi kumayambiriro ndi kumapeto kwa chingwe.
  • Anawonjezera ntchito fdiv (), yomwe imagwira ntchito yogawa popanda kutaya cholakwika pogawanika ndi ziro.
  • Zasinthidwa logic yolumikizira chingwe. Mwachitsanzo, mawu akuti 'echo "sum:" . $a + $b' m'mbuyomu adatanthauziridwa kuti 'echo ("sum: " . $a) + $b', ndipo mu PHP 8 adzatengedwa ngati 'echo "sum:" . ($a + $b)'.
  • Kumangika kuyang'ana masamu ndi magwiridwe antchito, mwachitsanzo, mawu akuti "[] % [42]" ndi "$object + 4" abweretsa cholakwika.
  • Zakhazikitsidwa algorithm yokhazikika yosinthira momwe dongosolo lazinthu zofananira limasungidwa pamaulendo osiyanasiyana.

Source: opennet.ru

Kuwonjezera ndemanga