Rhyddhau Salm 3.12, dadansoddwr statig ar gyfer yr iaith PHP. Rhyddhad Alpha o PHP 8.0

Cwmni Vimeo cyhoeddi rhyddhau dadansoddwr statig newydd Salm 3.12, sy'n eich galluogi i nodi gwallau amlwg a chynnil yn y cod PHP, yn ogystal â chywiro rhai mathau o wallau yn awtomatig. Mae'r system yn addas ar gyfer nodi problemau yn y cod etifeddiaeth ac mewn cod sy'n defnyddio nodweddion modern a gyflwynwyd mewn canghennau newydd o PHP. Mae cod y prosiect wedi'i ysgrifennu yn PHP a dosbarthu gan dan drwydded MIT.

Mae Salm yn nodi'r rhan fwyaf o'r problemau sy'n gysylltiedig â defnydd anghywir o fathau, yn ogystal ag amrywiol camgymeriadau nodweddiadol. Er enghraifft, mae'n cefnogi rhybuddion am gymysgu newidynnau o wahanol fathau mewn mynegiant, profion rhesymegol anghywir (fel “if ($a && $a) {}”, “if ($a && !$a) {}” a “ os ( $a) {} elseif ($a) {}"), cychwyniad anghyflawn o briodweddau gwrthrych. Mae'r dadansoddwr yn rhedeg mewn modd aml-edau. Mae'n bosibl cynnal sganiau cynyddrannol, sy'n dadansoddi dim ond ffeiliau sydd wedi newid ers y sgan diwethaf.

Yn ogystal, darperir offer rhaglennu diogel i ganiatáu defnyddiwch anodiadau yn y fformat bloc Doc (“/** @var Math */”) i ddarparu gwybodaeth am fathau amrywiol, gwerthoedd dychwelyd, paramedrau swyddogaeth, priodweddau gwrthrych. Cefnogir diffinio patrymau defnydd math a defnyddio datganiadau haeriad hefyd. Er enghraifft:

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

/** @var llinyn $a */
adlais strpos($a, 'helo');

/** @psalm-sert-os-gwir B $a */
ffwythiant isValidB(A $a) : bool {
dychwelyd $a enghraifft o B && $a->isValid();
}

Er mwyn awtomeiddio'r broses o ddileu problemau a ddarganfuwyd, darperir cyfleustodau Psalter, sy'n cefnogi ategion a yn caniatáu datrys problemau cod cyffredin, ychwanegu anodiadau math, a pherfformio manipulations megis symud dosbarthiadau o un gofod enw i'r llall, symud dulliau rhwng dosbarthiadau, ac ailenwi dosbarthiadau a dulliau.

Yn y rhifyn newydd o Salm gweithredu mae'r opsiwn " --taint-analysis" yn eich galluogi i olrhain y berthynas rhwng paramedrau mewnbwn a dderbyniwyd gan y defnyddiwr (er enghraifft, $_GET['name']) a'u defnydd mewn mannau lle mae angen dianc nod (er enghraifft, adlais " $enw "), gan gynnwys trwy olrhain cadwyni o aseiniadau canolradd a galwadau swyddogaeth. Ystyrir bod defnyddio araeau cysylltiad $_GET, $_POST a $_COOKIE yn ffynonellau data a allai fod yn beryglus, ond mae hefyd yn bosibl diffiniad ffynonellau eu hunain. Mae camau gweithredu sy'n gofyn am ddianc rhag olrhain yn cynnwys gweithrediadau allbwn sy'n cynhyrchu cynnwys HTML, ychwanegu penawdau HTTP, neu weithredu ymholiadau SQL.

Defnyddir dilysu wrth ddefnyddio swyddogaethau fel adlais, exec, cynnwys a phennawd. Wrth ddadansoddi'r angen am ddianc, mae mathau o ddata fel testun, llinynnau gyda chod SQL, HTML a Shell, llinynnau â pharamedrau dilysu yn cael eu hystyried. Mae'r modd arfaethedig yn caniatáu ichi nodi gwendidau yn y cod sy'n arwain at sgriptio traws-safle (XSS) neu amnewid SQL.

Yn ogystal, gellir ei nodi y dechrau profion alffa o'r gangen PHP 8.0 newydd. Mae'r datganiad wedi'i drefnu ar gyfer Tachwedd 26ain. Disgwylir y canlynol yn y gangen newydd: arloesiadaufel:

  • Galluogi Casglwr JIT, y bydd y defnydd ohono yn gwella cynhyrchiant.
  • Cymorth mathau o undeb, diffinio casgliadau o ddau fath neu fwy (er enghraifft, “foo swyddogaeth gyhoeddus(Foo|Bar $input): int| fflôt;”).
  • Cymorth priodoleddau (anodiadau) sy'n eich galluogi i rwymo metadata (fel gwybodaeth teip) i ddosbarthiadau heb ddefnyddio cystrawen Docblock.
  • Cystrawen fyrrach diffiniadau dosbarth, sy'n eich galluogi i gyfuno'r diffiniad o adeiladwr a phriodweddau.
  • Math dychwelyd newydd - sefydlog.
  • Math newydd - cymysg, y gellir ei ddefnyddio i benderfynu a yw swyddogaeth yn derbyn paramedrau o wahanol fathau.
  • Mynegiant taflu i ymdrin ag eithriadau.
  • Map Gwan i greu gwrthrychau y gellir eu haberthu wrth gasglu sbwriel (er enghraifft, i storio celciau diangen).
  • Cyfle gan ddefnyddio'r ymadrodd “::class” ar gyfer gwrthrychau (sy'n cyfateb i alw get_class()).
  • Cyfle diffiniadau yn y bloc dal o eithriadau nad ydynt yn rhwym i newidynnau.
  • Cyfle gadael coma ar ôl yr elfen olaf yn y rhestr o baramedrau swyddogaeth.
  • Rhyngwyneb newydd Llinynnol i nodi unrhyw fathau o linyn neu ddata y gellir eu trosi i linyn (y mae'r dull __toString() ar gael ar eu cyfer).
  • Nodwedd newydd str_cynnwys(), analog wedi'i symleiddio o strpos ar gyfer penderfynu ar ddigwyddiad is-linyn, yn ogystal â'r ffwythiannau str_starts_with() a str_ends_with() ar gyfer gwirio cyfatebion ar ddechrau a diwedd llinyn.
  • Nodwedd ychwanegol fdiv(), sy'n perfformio gweithrediad rhannu heb daflu gwall wrth rannu â sero.
  • Wedi newid rhesymeg uno llinyn. Er enghraifft, mae'r ymadrodd 'adlais "swm:" . Dehonglwyd $a + $b yn flaenorol fel 'echo ( "sum: " . $a) + $b', ac yn PHP 8 caiff ei drin fel 'echo" sum: " . ($a + $b)'.
  • Tynhau bydd gwirio gweithrediadau rhifyddeg a did, er enghraifft, yr ymadroddion "[] ​​%[42]" a "$object + 4" yn arwain at wall.
  • Gweithredwyd algorithm didoli sefydlog lle mae trefn yr un gwerthoedd yn cael ei gadw ar draws rhediadau gwahanol.

Ffynhonnell: opennet.ru

Ychwanegu sylw