Pagpagawas sa Salmo 3.12, usa ka static analyzer alang sa PHP nga pinulongan. Alpha nga pagpagawas sa PHP 8.0

Kompanya sa Vimeo gipatik bag-ong pagpagawas sa static analyzer Salmo 3.12, nga nagtugot kanimo sa pag-ila sa klaro ug maliputon nga mga sayop sa PHP code, ingon man usab sa awtomatik nga pagtul-id sa pipila ka matang sa mga sayop. Ang sistema angay alang sa pag-ila sa mga problema sa legacy code ug sa code nga naggamit sa modernong mga bahin nga gipaila sa bag-ong mga sanga sa PHP. Ang code sa proyekto gisulat sa PHP ug giapod-apod sa ubos sa lisensya sa MIT.

Ang Salmo nagpaila sa kadaghanan sa mga problema nga nalangkit sa sayop nga paggamit sa tipo, ingon man usab sa lainlain tipikal nga mga sayop. Pananglitan, gisuportahan niini ang mga pasidaan bahin sa pagsagol sa mga variable sa lainlaing mga lahi sa usa ka ekspresyon, dili husto nga lohikal nga mga pagsulay (sama sa "kung ($a && $a) {}", "kung ($a && !$a) {}" ug " kung ( $a) {} elseif ($a) {}"), dili kompleto nga pagsugod sa mga kabtangan sa butang. Ang analisador nagdagan sa multi-threaded mode. Posible ang paghimo sa mga incremental scan, nga mag-analisar lamang sa mga file nga nausab sukad sa katapusang pag-scan.

Dugang pa, ang luwas nga mga himan sa pagprograma gihatag aron tugutan paggamit annotation sa porma Docblock (“/** @var Type */”) para maghatag ug impormasyon bahin sa variable type, return values, function parameters, object properties. Gisuportahan usab ang paghubit sa mga sumbanan sa paggamit sa tipo ug paggamit sa mga pahayag sa pagpahayag. Pananglitan:

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

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

/** @salm-assert-kon-tinuod B $a */
function isValidB(A $a): bool {
ibalik ang $a instanceof B && $a->isValid();
}

Aron ma-automate ang pagwagtang sa nakit-an nga mga problema, gihatag ang Psalter utility, nga nagsuporta sa mga plugins ug kini nagtugot pag-troubleshoot sa kasagarang mga problema sa code, pagdugang sa mga anotasyon sa tipo, ug paghimo sa mga manipulasyon sama sa pagbalhin sa mga klase gikan sa usa ka namespace ngadto sa lain, pagbalhin sa mga pamaagi tali sa mga klase, ug pag-ilis sa mga klase ug mga pamaagi.

Sa bag-ong isyu sa Salmo gipatuman ang "--taint-analysis" nga opsyon nagtugot kanimo sa pagsubay sa relasyon tali sa input parameters nga nadawat gikan sa user (pananglitan, $_GET['name']) ug ang ilang paggamit sa mga dapit nga nagkinahanglan sa pag-eskapo sa karakter (pananglitan, echo " $ngalan "), lakip ang pinaagi sa pagsubay sa mga kadena sa mga intermediate nga buluhaton ug mga tawag sa function. Ang paggamit sa mga associative arrays $_GET, $_POST ug $_COOKIE gikonsiderar nga mga tinubdan sa posibleng delikado nga datos, apan posible usab kahulugan kaugalingong tinubdan. Ang mga aksyon nga nanginahanglan sa pag-ikyas sa pagsubay naglakip sa mga operasyon sa output nga nagmugna sa sulud sa HTML, pagdugang mga header sa HTTP, o pag-execute sa mga pangutana sa SQL.

Ang validation kay gigamit sa paggamit sa mga function sama sa echo, exec, naglakip ug header. Kung gi-analisar ang panginahanglan sa pag-eskapo, ang mga tipo sa datos sama sa teksto, mga kuwerdas nga adunay SQL, HTML ug Shell code, ang mga kuwerdas nga adunay mga parameter sa pag-authenticate gikonsiderar. Ang gisugyot nga mode nagtugot kanimo sa pag-ila sa mga kahuyangan sa code nga mosangpot sa cross-site scripting (XSS) o SQL substitution.

Dugang pa, kini mahimong matikdan Pagsugod alpha testing sa bag-ong PHP 8.0 branch. Ang pagpagawas gikatakda alang sa Nobyembre 26th. Ang mosunod gipaabot sa bag-ong sanga: mga inobasyon, ingon:

  • Pag-apil JIT compiler, ang paggamit niini makapauswag sa pagka-produktibo.
  • suporta mga tipo sa unyon, paghubit sa mga koleksyon sa duha o daghan pa nga mga tipo (pananglitan, “public function foo(Foo|Bar $input): int|float;”).
  • suporta mga hiyas (mga anotasyon) nga nagtugot kanimo sa pagbugkos sa metadata (sama sa tipo nga impormasyon) sa mga klase nga dili mogamit sa Docblock syntax.
  • Gipamubo nga syntax mga kahulugan sa klase, nga nagtugot kanimo sa paghiusa sa kahulugan sa usa ka tigtukod ug mga kabtangan.
  • Bag-ong tipo sa pagbalik - Walay pulos.
  • Bag-ong tipo - gisagol, nga magamit aron mahibal-an kung ang usa ka function modawat sa mga parameter sa lainlaing mga lahi.
  • Pagpahayag paglabay sa pagdumala sa mga eksepsiyon.
  • WeakMap sa paghimo og mga butang nga mahimong isakripisyo sa panahon sa pagkolekta sa basura (pananglitan, sa pagtipig sa wala kinahanglana nga mga cache).
  • Abilidad gamit ang ekspresyong “::class” para sa mga butang (kaamgid sa pagtawag get_class()).
  • Abilidad mga kahulugan sa catch block sa mga eksepsiyon nga dili gigapos sa mga variable.
  • Abilidad nagbilin ug comma human sa kataposang elemento sa lista sa function parameters.
  • Bag-ong interface Mahimong kuwerdas aron mahibal-an ang bisan unsang mga tipo sa string o datos nga mahimong mabag-o sa usa ka hilo (diin magamit ang __toString() nga pamaagi).
  • Bag-ong dagway str_contains(), usa ka gipasimple nga analogue sa strpos alang sa pagtino sa panghitabo sa usa ka substring, ingon man ang mga function str_starts_with() ug str_ends_with() para sa pagsusi sa mga posporo sa sinugdanan ug katapusan sa usa ka string.
  • Gidugang nga bahin fdiv(), nga naghimo sa usa ka division operation nga walay paglabay sa usa ka sayop sa diha nga pagbahin sa zero.
  • Nausab lohika sa pagdugtong sa string. Pananglitan, ang ekspresyong 'echo "sum:" . Ang $a + $b' kaniadto gihubad nga 'echo ("sum: " . $a) + $b', ug sa PHP 8 isipon nga 'echo "sum: " . ($a + $b)'.
  • Gihugot pagsusi sa aritmetika ug gamay nga operasyon, pananglitan, ang mga ekspresyong "[] % [42]" ug "$object + 4" moresulta sa usa ka sayop.
  • Gipatuman usa ka lig-on nga algorithm sa paghan-ay diin ang han-ay sa parehas nga mga kantidad gipreserba sa lainlaing mga dagan.

Source: opennet.ru

Idugang sa usa ka comment