Kompanya sa Vimeo bag-ong pagpagawas sa static analyzer , 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 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 . 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 annotation sa porma (“/** @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 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 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 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 alpha testing sa bag-ong PHP 8.0 branch. Ang pagpagawas gikatakda alang sa Nobyembre 26th. Ang mosunod gipaabot sa bag-ong sanga: , ingon:
- , ang paggamit niini makapauswag sa pagka-produktibo.
- Suporta , paghubit sa mga koleksyon sa duha o daghan pa nga mga tipo (pananglitan, “public function foo(Foo|Bar $input): int|float;”).
- Suporta (mga anotasyon) nga nagtugot kanimo sa pagbugkos sa metadata (sama sa tipo nga impormasyon) sa mga klase nga dili mogamit sa Docblock syntax.
- mga kahulugan sa klase, nga nagtugot kanimo sa paghiusa sa kahulugan sa usa ka tigtukod ug mga kabtangan.
- Bag-ong tipo sa pagbalik - .
- Bag-ong tipo - , nga magamit aron mahibal-an kung ang usa ka function modawat sa mga parameter sa lainlaing mga lahi.
- Pagpahayag sa pagdumala sa mga eksepsiyon.
- sa paghimo og mga butang nga mahimong isakripisyo sa panahon sa pagkolekta sa basura (pananglitan, sa pagtipig sa wala kinahanglana nga mga cache).
- gamit ang ekspresyong “::class” para sa mga butang (kaamgid sa pagtawag get_class()).
- mga kahulugan sa catch block sa mga eksepsiyon nga dili gigapos sa mga variable.
- nagbilin ug comma human sa kataposang elemento sa lista sa function parameters.
- Bag-ong interface 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 , 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 , nga naghimo sa usa ka division operation nga walay paglabay sa usa ka sayop sa diha nga pagbahin sa zero.
- 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)'.
- pagsusi sa aritmetika ug gamay nga operasyon, pananglitan, ang mga ekspresyong "[] % [42]" ug "$object + 4" moresulta sa usa ka sayop.
- 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
