Itusilẹ ti Orin Dafidi 3.12, olutupalẹ aimi fun ede PHP. Itusilẹ Alpha ti PHP 8.0

Ile-iṣẹ Vimeo atejade titun Tu ti aimi analyzer Orin 3.12, eyiti o fun ọ laaye lati ṣe idanimọ mejeeji awọn aṣiṣe ti o han gbangba ati arekereke ninu koodu PHP, bakannaa ṣatunṣe awọn iru awọn aṣiṣe kan laifọwọyi. Eto naa dara fun idamo awọn iṣoro mejeeji ni koodu ogún ati ni koodu ti o nlo awọn ẹya ode oni ti a ṣafihan ni awọn ẹka tuntun ti PHP. Awọn koodu ise agbese ti kọ ni PHP ati pin nipasẹ labẹ iwe-aṣẹ MIT.

Psalm n ṣe idanimọ pupọ julọ awọn iṣoro ti o nii ṣe pẹlu iru lilo ti ko tọ, ati ọpọlọpọ aṣoju aṣiṣe. Fun apẹẹrẹ, o ṣe atilẹyin awọn ikilọ nipa dapọ awọn oniyipada ti awọn oriṣiriṣi oriṣiriṣi ninu ikosile kan, awọn idanwo ọgbọn ti ko tọ (bii “if ($a && $a) {}”, “if ($a && !$a) {}” ati “ tí ($a) {} elseif ($a) {}"), ìpilẹ̀ṣẹ̀ pípé ti àwọn ohun-ìní nǹkan. Oluyanju nṣiṣẹ ni ipo olona-asapo. O ṣee ṣe lati ṣe awọn iwoye afikun, eyiti o ṣe itupalẹ awọn faili nikan ti o yipada lati ọlọjẹ to kẹhin.

Ni afikun, awọn irinṣẹ siseto to ni aabo ti pese lati gba laaye lilo awọn asọye ni ọna kika Docblock ("/** @var Iru */") lati pese alaye nipa awọn oriṣi oniyipada, awọn iye ipadabọ, awọn aye iṣẹ, awọn ohun-ini ohun. Itumọ awọn ilana lilo iru ati lilo awọn alaye asọye tun ni atilẹyin. Fun apere:

/** @var okun | asan */
$a = foo ();

/** @var okun $a */
iwoyi strpos($a, 'hello');

/** @psalm-assert-if-otitọ B $a */
iṣẹ isValidB(A $a): bool {
pada $ a instance of B & & $ a-> isValid ();
}

Lati ṣe adaṣe imukuro awọn iṣoro ti a rii, a pese ohun elo Psalter, eyiti o ṣe atilẹyin awọn afikun ati ti o faye gba Laasigbotitusita awọn iṣoro koodu ti o wọpọ, ṣafikun iru awọn asọye, ati ṣe awọn ifọwọyi gẹgẹbi gbigbe awọn kilasi lati aaye orukọ kan si omiran, awọn ọna gbigbe laarin awọn kilasi, ati lorukọ awọn kilasi ati awọn ọna.

Ninu iwe titun ti Psalm imuse aṣayan "--taint-analysis" gba ọ laaye lati ṣe itopase ibatan laarin awọn paramita igbewọle ti o gba lati ọdọ olumulo (fun apẹẹrẹ, $_GET['orukọ']) ati lilo wọn ni awọn aaye ti o nilo salọ iwa ihuwasi (fun apẹẹrẹ, iwoyi “ $orukọ "), pẹlu nipasẹ ipasẹ awọn ẹwọn ti awọn iṣẹ iyansilẹ agbedemeji ati awọn ipe iṣẹ. Lilo awọn akojọpọ associative $_GET, $_POST ati $_COOKIE ni a gba bi awọn orisun data ti o lewu, ṣugbọn o tun ṣee ṣe asọye awọn orisun ti ara. Awọn iṣe ti o nilo itọpa abayo pẹlu awọn iṣẹ iṣelọpọ ti o ṣe agbejade akoonu HTML, ṣafikun awọn akọle HTTP, tabi ṣiṣẹ awọn ibeere SQL.

Afọwọsi jẹ lilo nigba lilo awọn iṣẹ bii iwoyi, exec, pẹlu ati akọsori. Nigbati o ba n ṣe itupalẹ iwulo fun salọ, awọn iru data gẹgẹbi ọrọ, awọn okun pẹlu SQL, HTML ati koodu Shell, awọn okun pẹlu awọn aye ijẹrisi ni a gba sinu apamọ. Ipo ti a dabaa gba ọ laaye lati ṣe idanimọ awọn ailagbara ninu koodu ti o yorisi iwe afọwọkọ aaye-agbelebu (XSS) tabi aropo SQL.

Ni afikun, o le ṣe akiyesi Bẹrẹ Alpha igbeyewo ti awọn titun PHP 8.0 ẹka. Itusilẹ ti wa ni eto fun Oṣu kọkanla ọjọ 26th. Awọn atẹle ni a nireti ni ẹka tuntun: awọn imotuntunbi:

  • Ifisi JIT alakojo, awọn lilo ti eyi ti yoo mu ise sise.
  • .Оддержка Euroopu orisi, asọye awọn akojọpọ ti awọn oriṣi meji tabi diẹ sii (fun apẹẹrẹ, “iṣẹ iṣẹ ilu foo(Foo|Bar $input): int|float;”).
  • .Оддержка eroja (awọn asọye) ti o gba ọ laaye lati di metadata (gẹgẹbi iru alaye) si awọn kilasi laisi lilo sintasi Docblock.
  • Sintasi kuru kilasi itumo, gbigba o lati darapo awọn definition ti a Constructor ati ini.
  • Iru ipadabọ tuntun - aimi.
  • Iru tuntun - adalu, eyi ti o le ṣee lo lati pinnu boya iṣẹ kan gba awọn paramita ti awọn oriṣiriṣi oriṣi.
  • Ikosile jabọ lati mu awọn imukuro.
  • Alailagbara lati ṣẹda awọn nkan ti o le rubọ lakoko ikojọpọ idoti (fun apẹẹrẹ, lati tọju awọn caches ti ko wulo).
  • Anfani lilo ikosile ":: kilasi" fun awọn nkan (afọwọṣe si pipe get_class ()).
  • Anfani itumo ni apeja Àkọsílẹ ti awọn imukuro ti o ko ba wa ni owun si awọn oniyipada.
  • Anfani nlọ kan koma lẹhin ti o kẹhin ano ni awọn akojọ ti awọn paramita iṣẹ.
  • Ni wiwo titun Stringable lati ṣe idanimọ eyikeyi iru okun tabi data ti o le yipada si okun (fun eyiti ọna __toString () wa).
  • Ẹya tuntun str_ni(), Afọwọṣe ti o rọrun ti strpos fun ṣiṣe ipinnu iṣẹlẹ ti okun, bakanna bi awọn iṣẹ str_starts_with () ati str_ends_with () fun ṣiṣe ayẹwo awọn ere-kere ni ibẹrẹ ati opin okun kan.
  • Ẹya ti a ṣafikun fdiv(), eyi ti o ṣe iṣẹ pipin laisi fifọ aṣiṣe nigba ti o pin nipasẹ odo.
  • Yipada okun dida kannaa. Fun apẹẹrẹ, ọrọ naa 'echo "sum:" . $a + $b' ni a tumọ tẹlẹ bi 'echo ("sum: " . $a) + $b', ati ni PHP 8 yoo ṣe itọju bi 'echo "sum:" . ($a +$b)'.
  • Ti di pupọ Ṣiṣayẹwo iṣiro ati awọn iṣẹ bit, fun apẹẹrẹ, awọn ikosile "[]% [42]" ati "$ ohun + 4" yoo ja si aṣiṣe.
  • Ti ṣe imuse algorithm yiyan iduroṣinṣin ninu eyiti aṣẹ ti awọn iye kanna ti wa ni fipamọ kọja awọn ṣiṣe oriṣiriṣi.

orisun: opennet.ru

Fi ọrọìwòye kun