Mwepụta nke Abụ Ọma 3.12, onye na-enyocha asụsụ PHP. Mwepụta Alpha nke PHP 8.0

Ụlọ ọrụ Vimeo bipụtara ọhụrụ ntọhapụ nke static analyzer Psalm 3.12, nke na-enye gị ohere ịchọpụta ma njehie doro anya na nke dị aghụghọ na koodu PHP, yana dozie ụfọdụ ụdị njehie na-akpaghị aka. Usoro ahụ dabara adaba maka ịchọpụta nsogbu ma na koodu nketa yana koodu na-eji njirimara ọgbara ọhụrụ ewebata na ngalaba PHP ọhụrụ. Edere koodu oru ngo na PHP na kesara site n'okpuru ikike MIT.

Abụ Ọma na-akọwapụta ọtụtụ nsogbu ndị metụtara ojiji ụdị na-ezighi ezi, yana ụdị dị iche iche ụdị mmejọ. Dịka ọmụmaatụ, ọ na-akwado ịdọ aka ná ntị gbasara ịgwakọta mgbanwe dị iche iche nke ụdị dị iche iche na nkwupụta, ule ezi uche na-ezighi ezi (dịka "ọ bụrụ ($a &&$a) {}", "ọ bụrụ ($a && !$a) {}" na " ọ bụrụ na ($a) {} elseif ($a) {}"), mmalite ihe eji eme ihe ezughị ezu. Onye nyocha na-agba ọsọ n'ụdị eriri multi-threaded. Ọ ga-ekwe omume ịme nyocha agbakwunyere, nke na-enyocha naanị faịlụ ndị gbanwere kemgbe nyocha ikpeazụ.

Na mgbakwunye, a na-enye ngwaọrụ mmemme echekwara ka o kwe jiri nkọwa na usoro Docblock ("/** @var Ụdị */") iji nye ozi gbasara ụdị agbanwe agbanwe, ụkpụrụ nlọghachi, paramita ọrụ, njirimara ihe. A na-akwadokwa ịkọwapụta ụkpụrụ ojiji ụdị na iji nkwupụta nkwuputa. Ọmụmaatụ:

/** @var eriri | efu */
$a = foo();

/** @var eriri $a */
echo strpos($a, 'ndewo');

/** @psalm-assert-ọ bụrụ-ezi B $a */
ọrụ isValidB(A $a): bool {
weghachi $a ihe atụ nke B && $a-> isValid();
}

Iji mebie mkpochapụ nsogbu ndị achọtara, a na-enye ọrụ Psalter, nke na-akwado plugins na ọ na-enye ohere dozie nsogbu koodu nkịtị, tinye nkọwapụta ụdị, wee rụọ ọrụ aka dị ka ịkwaga klaasị site n'otu oghere aha gaa na nke ọzọ, ụzọ mbugharị n'etiti klaasị, na ịnyegharị klaasị na ụzọ aha.

Na mbipụta ọhụrụ nke Abụ Ọma emejuputa atumatu nhọrọ "--taint-analysis" na-enye gị ohere ịchọpụta mmekọrịta dị n'etiti ntinye ntinye natara n'aka onye ọrụ (dịka ọmụmaatụ, $ _GET['aha']) na ojiji ha na ebe ndị chọrọ ịgbanahụ àgwà (dịka ọmụmaatụ, echo " aha $ "), gụnyere site na nsuso agbụ nke ọrụ etiti yana oku ọrụ. A na-ahụta iji usoro mmekọrịta $_GET, $_POST na $_COOKIE dị ka isi mmalite nke data nwere ike ịdị ize ndụ, mana ọ ga-ekwe omume. nkọwa isi mmalite. Omume ndị chọrọ mgbanarị nsochi gụnyere arụmọrụ mmepụta na-emepụta ọdịnaya HTML, tinye isi okwu HTTP, ma ọ bụ mebie ajụjụ SQL.

A na-eji nkwado mgbe ị na-eji ọrụ dị ka echo, exec, gụnyere na nkụnye eji isi mee. Mgbe ị na-enyocha mkpa maka ịgbanahụ, ụdị data dị ka ederede, eriri na SQL, HTML na Shell code, a na-eburu n'uche na eriri nwere njirimara njirimara. Usoro a tụrụ aro na-enye gị ohere ịchọpụta adịghị ike na koodu ahụ na-eduga na scripting saịtị (XSS) ma ọ bụ nnọchi SQL.

Ọzọkwa, enwere ike ịdeba ya malite ule alfa nke ngalaba PHP 8.0 ọhụrụ. Emebere mwepụta a maka Nọvemba 26th. A na-atụ anya ihe ndị a na ngalaba ọhụrụ: ihe ọhụrụdị ka:

  • Ike elu JIT nchịkọta, ojiji nke ga-eme ka arụpụta ọrụ dịkwuo mma.
  • support otu ụdị, na-akọwa nchịkọta nke ụdị abụọ ma ọ bụ karịa (dịka ọmụmaatụ, "ọrụ ọha foo(Foo|Ogwe $ ntinye): int | sere n'elu;").
  • support àgwà (nkọwa) na-enye gị ohere ijikọ metadata (dị ka ozi ụdị) na klaasị na-ejighi Docblock syntax.
  • Okwu mkpirisi nkọwa klas, na-enye gị ohere ijikọta nkọwa nke onye nrụpụta na ihe onwunwe.
  • Ụdị nloghachi ọhụrụ - nke a.
  • Ụdị ọhụrụ - mbuaha, nke enwere ike iji chọpụta ma ọrụ ọ na-anabata paramita nke ụdị dị iche iche.
  • Okwu otutu ijikwa ihe ndị ọzọ.
  • Map adịghị ike ịmepụta ihe ndị a ga-achụ n'àjà n'oge nchịkọta mkpofu (dịka ọmụmaatụ, iji chekwaa cache na-enweghị isi).
  • Ohere iji okwu ":: klaasị" maka ihe (ihe yiri ịkpọ get_class()).
  • Ohere nkọwa n'ime njide nwuchi nke ewepu na-ejikọtaghị na mgbanwe.
  • Ohere na-ahapụ rikoma ka emechara mmewere ikpeazụ na ndepụta paramita ọrụ.
  • Ọhụrụ interface Enwere ike eriri iji chọpụta ụdị eriri ọ bụla ma ọ bụ data enwere ike ịtụgharị gaa na eriri (nke usoro __toString() dị).
  • Atụmatụ ọhụrụ str_nwere(), a simplified analogue nke strpos maka ịchọpụta na ọnọdụ nke a substring, yana ọrụ str_starts_with() na str_ends_with() maka ịlele matches na mmalite na njedebe nke eriri.
  • Ọrụ agbakwunyere fdiv(), nke na-arụ ọrụ nkewa na-enweghị atụfu njehie mgbe ị na-ekesa site na efu.
  • Gbanwee eriri njikọ mgbagha. Dịka ọmụmaatụ, okwu 'echo "sum:" . A kọwaburu $a + $b' dị ka 'echo ("nchịkọta: " . $a) + $b', na na PHP 8 ka a ga-ewere dị ka 'echo "sum:" . ($a +$b)'.
  • Ejisiri ike ịlele mgbakọ na mwepụ na arụmọrụ bit, dịka ọmụmaatụ, okwu "[] % [42]" na "$ ihe + 4" ga-ebute njehie.
  • Emere ya algọridim nhazi kwụsiri ike nke a na-echekwa usoro nke ụkpụrụ ndị ahụ n'ofe ọsọ dị iche iche.

isi: opennet.ru

Tinye a comment