Paglabas ng Psalm 3.12, isang static analyzer para sa PHP language. Alpha release ng PHP 8.0

Kompanya ng Vimeo опубликовала bagong release ng static analyzer Awit 3.12, na nagbibigay-daan sa iyong tukuyin ang parehong halata at banayad na mga error sa PHP code, pati na rin awtomatikong itama ang ilang uri ng mga error. Ang sistema ay angkop para sa pagtukoy ng mga problema sa parehong legacy code at sa code na gumagamit ng mga modernong feature na ipinakilala sa mga bagong sangay ng PHP. Ang code ng proyekto ay nakasulat sa PHP at ipinamahagi ni sa ilalim ng lisensya ng MIT.

Tinutukoy ng Salmo ang karamihan sa mga problemang nauugnay sa maling paggamit ng uri, pati na rin ang iba't-ibang karaniwang mga pagkakamali. Halimbawa, sinusuportahan nito ang mga babala tungkol sa paghahalo ng mga variable ng iba't ibang uri sa isang expression, mga maling lohikal na pagsubok (gaya ng “if ($a && $a) {}”, “if ($a && !$a) {}” at “ kung ( $a) {} elseif ($a) {}"), hindi kumpletong pagsisimula ng mga katangian ng object. Ang analyzer ay tumatakbo sa multi-threaded mode. Posibleng magsagawa ng mga incremental scan, na sinusuri lamang ang mga file na nagbago mula noong huling pag-scan.

Bilang karagdagan, ang mga secure na tool sa programming ay ibinigay upang payagan gamitin mga anotasyon sa format Docblock (“/** @var Type */”) para magbigay ng impormasyon tungkol sa mga uri ng variable, return value, function parameters, object properties. Sinusuportahan din ang pagtukoy sa mga pattern ng paggamit ng uri at paggamit ng mga assert statement. Halimbawa:

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

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

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

Upang i-automate ang pag-aalis ng mga nahanap na problema, ang Psalter utility ay ibinigay, na sumusuporta sa mga plugin at ay nagbibigay-daan sa i-troubleshoot ang mga karaniwang problema sa code, magdagdag ng mga uri ng anotasyon, at magsagawa ng mga manipulasyon tulad ng paglipat ng mga klase mula sa isang namespace patungo sa isa pa, paglipat ng mga pamamaraan sa pagitan ng mga klase, at pagpapalit ng pangalan ng mga klase at pamamaraan.

Sa bagong isyu ng Salmo ipinatupad binibigyang-daan ka ng opsyong "--taint-analysis" na masubaybayan ang kaugnayan sa pagitan ng mga parameter ng input na natanggap mula sa user (halimbawa, $_GET['name']) at ang paggamit ng mga ito sa mga lugar na nangangailangan ng pagtakas ng character (halimbawa, echo " $pangalan "), kabilang ang sa pamamagitan ng pagsubaybay sa mga chain ng intermediate assignment at function call. Ang paggamit ng mga nag-uugnay na array na $_GET, $_POST at $_COOKIE ay itinuturing bilang mga mapagkukunan ng potensyal na mapanganib na data, ngunit posible rin ito определение sariling mga mapagkukunan. Ang mga pagkilos na nangangailangan ng pagtakas sa pagsubaybay ay kinabibilangan ng mga pagpapatakbo ng output na bumubuo ng HTML na nilalaman, magdagdag ng mga header ng HTTP, o nagpapatupad ng mga query sa SQL.

Ginagamit ang pagpapatunay kapag gumagamit ng mga function tulad ng echo, exec, include at header. Kapag sinusuri ang pangangailangan para sa pagtakas, ang mga uri ng data tulad ng teksto, mga string na may SQL, HTML at Shell code, mga string na may mga parameter ng pagpapatunay ay isinasaalang-alang. Binibigyang-daan ka ng iminungkahing mode na tukuyin ang mga kahinaan sa code na humahantong sa cross-site scripting (XSS) o pagpapalit ng SQL.

Bilang karagdagan, maaari mong tandaan simulan alpha testing ng bagong PHP 8.0 branch. Ang paglabas ay naka-iskedyul para sa ika-26 ng Nobyembre. Ang mga sumusunod ay inaasahan sa bagong sangay: mga inobasyonTulad ng:

  • Pag-enable JIT compiler, ang paggamit nito ay magpapahusay sa pagiging produktibo.
  • Suporta mga uri ng unyon, pagtukoy sa mga koleksyon ng dalawa o higit pang mga uri (halimbawa, “public function foo(Foo|Bar $input): int|float;”).
  • Suporta mga katangian (mga anotasyon) na nagbibigay-daan sa iyong i-bind ang metadata (gaya ng impormasyon ng uri) sa mga klase nang hindi gumagamit ng Docblock syntax.
  • Pinaikling syntax mga kahulugan ng klase, na nagpapahintulot sa iyo na pagsamahin ang kahulugan ng isang constructor at mga katangian.
  • Bagong uri ng pagbabalik - statik.
  • Bagong uri - magkakahalo, na maaaring gamitin upang matukoy kung ang isang function ay tumatanggap ng mga parameter ng iba't ibang uri.
  • Pagpapahayag ihagis upang mahawakan ang mga pagbubukod.
  • WeakMap upang lumikha ng mga bagay na maaaring isakripisyo sa panahon ng pagkolekta ng basura (halimbawa, upang mag-imbak ng mga hindi kinakailangang cache).
  • Pagkakataon gamit ang expression na "::class" para sa mga bagay (katulad ng pagtawag sa get_class()).
  • Pagkakataon mga kahulugan sa catch block ng mga exception na hindi nakatali sa mga variable.
  • Pagkakataon nag-iiwan ng kuwit pagkatapos ng huling elemento sa listahan ng mga parameter ng function.
  • Bagong interface Stringable upang matukoy ang anumang uri ng string o data na maaaring i-convert sa isang string (kung saan available ang __toString() na pamamaraan).
  • Bagong feature str_contains(), isang pinasimple na analogue ng strpos para sa pagtukoy ng paglitaw ng isang substring, pati na rin ang mga function na str_starts_with() at str_ends_with() para sa pagsuri ng mga tugma sa simula at dulo ng isang string.
  • Idinagdag na tampok fdiv(), na nagsasagawa ng operasyon ng paghahati nang hindi nagtatapon ng error kapag hinahati sa zero.
  • Nagbago lohika ng pagsasama ng string. Halimbawa, ang expression na 'echo "sum:" . Ang $a + $b' ay dating binibigyang kahulugan bilang 'echo ("sum: " . $a) + $b', at sa PHP 8 ay ituturing na 'echo "sum: " . ($a + $b)'.
  • Hinigpitan pagsuri sa mga pagpapatakbo ng aritmetika at bit, halimbawa, ang mga expression na "[] % [42]" at "$object + 4" ay magreresulta sa isang error.
  • Ipinatupad isang matatag na algorithm ng pag-uuri kung saan ang pagkakasunud-sunod ng magkaparehong mga halaga ay pinapanatili sa iba't ibang mga pagtakbo.

Pinagmulan: opennet.ru

Magdagdag ng komento