PHP 8.1 የፕሮግራም አወጣጥ ቋንቋ መለቀቅ

ከአንድ አመት እድገት በኋላ የ PHP 8.1 ፕሮግራሚንግ ቋንቋ ተለቀቀ። አዲሱ ቅርንጫፍ ተከታታይ አዳዲስ ባህሪያትን እና ተኳኋኝነትን የሚጥሱ በርካታ ለውጦችን ያካትታል።

በ PHP 8.1 ውስጥ ቁልፍ ማሻሻያዎች፡-

  • ለቁጥሮች ተጨማሪ ድጋፍ ፣ ለምሳሌ ፣ አሁን የሚከተሉትን ግንባታዎች መጠቀም ይችላሉ enum ሁኔታ (ጉዳይ በመጠባበቅ ላይ); ጉዳይ ንቁ; ጉዳይ በማህደር የተቀመጠ; } ክፍል ፖስት {የህዝብ ተግባር __ኮንስትራክሽን( የግል ሁኔታ $status = ሁኔታ :: በመጠባበቅ ላይ);
  • በዝቅተኛ ደረጃ ላይ የማስፈጸሚያ ክሮች ለማስተዳደር የሚያስችልዎ ፋይበርስ ለሚባሉት ቀላል ክብደት ክሮች ድጋፍ ታክሏል። የፋይበር ድጋፍ ወደ Amphp እና ReactPHP ማዕቀፎች ለመጨመር ታቅዷል። $ ፋይበር = አዲስ ፋይበር (ተግባር (): ባዶ {$valueAfterResuming = Fiber :: ተንጠልጣይ ('ከታገደ በኋላ'); // ... }); $valueAfterSuspending = $ፋይበር->ጀምር (); $ ፋይበር-> ከቆመበት ይቀጥላል ('ከቆመበት ከቀጠለ በኋላ');
  • የነገር ኮድ መሸጎጫ (opcache) አተገባበር ተሻሽሏል፣ ይህም ስለ ክፍል ውርስ መረጃ መሸጎጥ ተችሏል። ማመቻቸት የአንዳንድ መተግበሪያዎችን አፈጻጸም ከ5-8 በመቶ ለማሳደግ አስችሏል። ሌሎች ማሻሻያዎች የጂአይቲ ኦፕሬሽንን ማመቻቸት፣ የጂአይቲ ድጋፍ ለ ARM64 አርክቴክቸር (AArch64) መተግበር፣ የስም መፍታትን ማፋጠን፣ የጊዜ ሊብ እና የኤክስት/ቀን ቤተ-መጻሕፍትን ማመቻቸት፣ ተከታታይነት እና የመጥፋት አፈጻጸም መጨመር፣ የጌት_ዲክላሬድ_ክፍሎችን ማመቻቸት ()፣ ፍንዳታ() , strtr () ተግባር, strnatcmp (), dechex (). በአጠቃላይ፣ ለSymfony Demo የ23.0% የአፈጻጸም ጭማሪ፣ እና 3.5% ለ WordPress።
  • አዲስ ድርድር ሲገልጹ ያሉትን ድርድር ለመተካት የሚፈቅደው የማሸግ ኦፕሬተር በድርድር ውስጥ ያለው "...$var" የሕብረቁምፊ ቁልፎችን ለመደገፍ ተራዝሟል (ከዚህ ቀደም ዲጂታል ለዪዎች ብቻ ይደገፋሉ)። ለምሳሌ፣ አሁን በኮድ ውስጥ መጠቀም ትችላለህ፡ $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0፣ …$array1፣ …$array2]; var_dump ($ ድርድር); // ["a" => 1፣ "b" => 2]
  • እንደ የተግባር ፍቺዎች እንደ ነባሪ መለኪያ ወይም በክርክር ባሕሪያት ውስጥ የ"አዲሱን" ቁልፍ ቃል በጀማሪዎች ውስጥ እንዲጠቀም ተፈቅዶለታል። ክፍል MyController {የወል ተግባር __ኮንስትራክሽን(የግል ሎገር $logger = አዲስ NullLogger()) {} }
  • ለንባብ-ብቻ መዳረሻ የክፍል ንብረቶችን ምልክት ማድረግ ይቻላል (በእንደዚህ ያሉ ንብረቶች ውስጥ ያለው መረጃ አንድ ጊዜ ብቻ ሊፃፍ ይችላል ፣ ከዚያ በኋላ ለለውጥ አይገኝም)። ክፍል PostData {የወል ተግባር __ግንባታ(የወል ተነባቢ-ብቻ ሕብረቁምፊ $ ርዕስ፣ ይፋዊ ተነባቢ ብቻ DateTimeImmutable $date፣) {}} $post = አዲስ ልጥፍ('Title'፣ /* … */); $post-> ርዕስ = 'ሌላ'; > ስህተት፡ ተነባቢ ብቻ ንብረት ፖስት::$ ርዕስ መቀየር አይቻልም::
  • ሊጠሩ ለሚችሉ ነገሮች አዲስ አገባብ ተተግብሯል - መዘጋት አሁን ተግባርን በመጥራት እሴቱን "..." እንደ ክርክር (ማለትም myFunc (...) ከመዝጋት ይልቅ :: ከካላብል ('myFunc) ይልቅ ሊፈጠር ይችላል. ')): ተግባር foo (int $a፣ int $b) {/* … */} $foo = foo(...); $fo (a: 1, b: 2);
  • ለመገናኛ ዓይነቶች ሙሉ ድጋፍ ታክሏል ፣ ይህም ያሉትን በማጣመር አዳዲስ ዓይነቶችን እንዲፈጥሩ ያስችልዎታል። የሁለት ወይም ከዚያ በላይ ዓይነቶች ስብስቦችን ከሚገልጹት ከማህበር ዓይነቶች በተለየ ፣ የመገናኛ ዓይነቶች ከተዘረዘሩት ዓይነቶች ውስጥ አንዳቸውም መኖራቸውን ሳይሆን በስብስቡ ውስጥ ያሉ ሁሉም የተገለጹ ዓይነቶች እንዲሞሉ ይፈልጋሉ። ተግባር ያመነጫልSlug(HasTitle&HasId $post) {መመለስ strtolower($post->getTitle())። $ post-> getId (); }
  • አንድ ተግባር የፕሮግራም አፈፃፀምን እንደሚያቋርጥ ለስታቲክ analyzers ለማሳወቅ ጥቅም ላይ ሊውል የሚችል አዲስ ዓይነት "በጭራሽ" አለ, ለምሳሌ ልዩ ሁኔታን በመወርወር ወይም የመውጫ ተግባሩን በመፈጸም. ተግባር dd (ድብልቅ $ ግቤት)፡ በጭራሽ { መውጣት; }
  • አዲስ ተግባር array_is_list ቀርቧል፣ ይህም በድርድር ውስጥ ያሉት ቁልፎች በቅደም ተከተል የተቀመጡ መሆናቸውን ለማወቅ የሚያስችልዎ የቁጥር እሴቶችን ለመጨመር ነው፣ ከ 0 ጀምሮ: $list = [“a”፣ “b”፣ “c”]; array_is_list($ ዝርዝር); // እውነት $notAList = [1 => "a", 2 => "b", 3 => "ሐ"]; array_is_list($ notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "ሐ"]; array_is_list($ alsoNotAList); // ሐሰት
  • አሁን የወላጅ ክፍል ቋሚዎች እንዳይሻሩ ለመከላከል "የመጨረሻ" ቁልፍ ቃል መጠቀም ትችላለህ። ክፍል Foo (የመጨረሻው የህዝብ ኮንስት X = "foo"; } ክፍል ባር Fooን ይዘልቃል { public const X = "ባር"; > ገዳይ ስህተት፡ ባር:: X የመጨረሻውን ቋሚ ፉ:: X } መሻር አይችልም
  • የfsync እና fdatasync ተግባራት ለውጦችን ከዲስክ መሸጎጫ እንዲቀመጡ ለማስገደድ ታቅዷል። $ ፋይል = ፎፔን ("sample.txt", "w"); fwrite($ ፋይል፣ "አንዳንድ ይዘት"); if (fsync($file)) { echo "ፋይሉ በተሳካ ሁኔታ በዲስክ ላይ ተቀምጧል።"; } fclose ($ ፋይል);
  • ቀደም ሲል ጥቅም ላይ ከዋለው "0" ቅድመ ቅጥያ በተጨማሪ "0o" እና "0O" ቅድመ ቅጥያዎችን ለስምንት ቁጥሮች የመጠቀም ችሎታ ታክሏል. 016 === 0o16; // እውነት 016 === 0O16; // እውነት
  • የ$GLOBALS አጠቃቀምን በምርጫ ለመገደብ ታቅዷል፣ይህም ወደ ኋላ ቀር ተኳሃኝነት መጣስ ያስከትላል፣ነገር ግን በድርድር ስራዎችን በከፍተኛ ሁኔታ ለማፋጠን ያስችላል። ለምሳሌ፣ ወደ $GLOBALS መፃፍን ማሰናከል እና $GLOBALSን በጠቋሚ የማለፍ እድሉ እየታሰበ ነው። የ 2000 ፓኬጆች ትንተና እንደሚያሳየው በዚህ ለውጥ የሚጎዱት 23ቱ ብቻ ናቸው። ለምሳሌ፣ ሃሳቡ ከፀደቀ፣ 8.1 ከአሁን በኋላ እንደ፡ $GLOBALS = []; $GLOBALS += []; $ ግሎባል = & $ x; $ x = & $ ግሎባል; ያልተዋቀረ($GLOBALS); by_ref($GLOBALS);
  • የውስጥ ዘዴዎች አሁን ትክክለኛውን አይነት መመለስ አለባቸው. በPHP 8.1 ከተግባር መግለጫው ጋር የማይዛመድ አይነት መመለስ ማስጠንቀቂያ ይሰጣል፣ በ PHP 9.0 ግን ማስጠንቀቂያው በስህተት ይተካል።
  • ተግባራትን ከሃብት ከመጠቀም ወደ ዕቃዎች መጠቀሚያ የማሸጋገር ስራ ቀጥሏል። የፊንፎ_* እና imap_* ተግባራት ወደ ዕቃዎች ተላልፈዋል።
  • ነጋሪ እሴቶችን ማለፍ ተቋርጧል ወደ ውስጣዊ ተግባራት ነጋሪ እሴቶችን ማለፍ. በPHP 8.1 እንደ str_contains("string" null) ግንባታዎችን መጠቀም ወደ ማስጠንቀቂያ እና በPHP 9 ወደ ስህተት ይመራል።
  • ለ MurmurHash3 እና xxHash hashing ስልተ ቀመሮች ድጋፍ ታክሏል።

ምንጭ: opennet.ru

አስተያየት ያክሉ