ఒక సంవత్సరం అభివృద్ధి తర్వాత, PHP 8.4 ప్రోగ్రామింగ్ భాష విడుదల చేయబడింది. కొత్త బ్రాంచ్లో కొత్త ఫీచర్ల శ్రేణి, అలాగే అనుకూలతను విచ్ఛిన్నం చేసే అనేక మార్పులు ఉన్నాయి.
PHP 8.4లో కీలక మార్పులు:
- IR ఫ్రేమ్వర్క్ ఆధారంగా రూపొందించబడిన JIT కంపైలర్ యొక్క కొత్త అమలు ప్రతిపాదించబడింది. ప్రధాన వ్యత్యాసం ఏమిటంటే, పాత JIT నేరుగా బైట్కోడ్ ఆధారంగా మెషీన్ సూచనలను రూపొందించింది మరియు x86_64 మరియు AArch64 ఆర్కిటెక్చర్ల కోసం విభిన్న బ్యాకెండ్లను ఉపయోగిస్తుంది, అయితే కొత్త JIT అన్ని ఆర్కిటెక్చర్లకు ఒకే బ్యాకెండ్ను ఉపయోగిస్తుంది మరియు ఇంటర్మీడియట్ రిప్రజెంటేషన్ (IR)ని ఉత్పత్తి చేస్తుంది. కావలసిన టార్గెట్ ప్లాట్ఫారమ్ కోసం ఆప్టిమైజ్ చేయబడింది మరియు మెషిన్ సూచనలకు మార్చబడింది.
- ప్రాపర్టీ హుక్లను జోడించడానికి మద్దతు జోడించబడింది, ఒక ఆబ్జెక్ట్ యొక్క లక్షణాలను మార్చేటప్పుడు లేదా యాక్సెస్ చేసేటప్పుడు అమలు చేయబడిన అదనపు లాజిక్ను జోడించడానికి మిమ్మల్ని అనుమతిస్తుంది, సాధారణ ఫంక్షన్లు __get మరియు __setని ఉపయోగించి రీడ్ మరియు రైట్ ఆపరేషన్లకు అంతరాయం కలిగించకుండా మరియు అదనపు బైండింగ్ పద్ధతులను సృష్టించకుండా అమలు చేయబడుతుంది. ప్రాపర్టీ హ్యాండ్లర్ల ఉపయోగం కోడ్ మొత్తాన్ని గణనీయంగా తగ్గించడం మరియు లక్షణాలతో పని చేసే ప్రవర్తన యొక్క పునర్నిర్వచనాన్ని సులభతరం చేయడం సాధ్యపడుతుంది, ప్రతి ఆస్తికి దాని స్వంత హ్యాండ్లర్ యొక్క బైండింగ్కు ధన్యవాదాలు. తరగతి వినియోగదారు {పబ్లిక్ స్ట్రింగ్ $పేరు {సెట్ {if (strlen($value) === 0) {త్రో కొత్త ValueError("పేరు ఖాళీగా ఉండాలి"); } $this->పేరు = $value; } } పబ్లిక్ ఫంక్షన్ __నిర్మాణం(స్ట్రింగ్ $పేరు) {$this->పేరు = $పేరు; } }
- బ్రాకెట్లను వేరు చేయకుండా "కొత్త" నిర్మాణంలో పద్ధతులకు సూచనలను సూచించడానికి ఇది అనుమతించబడుతుంది, అనగా. “$name = (new MyClass())->method()”కి బదులుగా మీరు ఇప్పుడు “$name = new MyClass()->method()”ని పేర్కొనవచ్చు.
- ఆబ్జెక్ట్ ప్రాపర్టీస్ (పబ్లిక్, ప్రైవేట్, ప్రొటెక్టెడ్) యొక్క విజిబిలిటీని అసమానంగా నియంత్రించే సామర్థ్యం జోడించబడింది, వ్రాత (సెట్) మరియు రీడ్ (గెట్) ఆపరేషన్ల కోసం విడిగా. ఉదాహరణకు: తరగతి PhpVersion {పబ్లిక్ ప్రైవేట్(సెట్) స్ట్రింగ్ $వెర్షన్ = '8.4'; } $phpVersion = కొత్త PhpVersion(); var_dump ($ phpVersion-> వెర్షన్); // స్ట్రింగ్(3) "8.4" $phpVersion->వెర్షన్ = 'PHP 8.3'; // లోపం
- "సోమరితనం" వస్తువులకు ప్రామాణిక మద్దతు అందించబడింది, ఇది మొదటి ఉపయోగం సమయంలో ప్రారంభించబడుతుంది.
- సాధారణ పరామితి "opcache.jit_buffer_size"కి బదులుగా, "opcache.jit" మరియు "opcache.jit_buffer_size" పారామితులు JIT కంపైలర్ను నియంత్రించడానికి మరియు JIT బఫర్ పరిమాణాన్ని కాన్ఫిగర్ చేయడానికి ప్రతిపాదించబడ్డాయి. JITని నిలిపివేయడానికి, మీరు ఇప్పుడు "opcache.jit_buffer_size=0"కి బదులుగా "opcache.jit=disable"ని పేర్కొనవచ్చు. కొన్ని సందర్భాల్లో మెమరీ వినియోగాన్ని తగ్గించడానికి మరియు JIT పనితీరును మెరుగుపరచడానికి మార్పులు చేయబడ్డాయి.
- నిలిపివేయబడిన ఫంక్షన్లు, తరగతులు మరియు పద్ధతులను గుర్తించడానికి “#[\విస్మరించబడిన]” లక్షణం జోడించబడింది. #[\విస్మరించబడింది("బదులుగా కొత్తఫంక్షన్()ని ఉపయోగించండి", నుండి: "1.1")] ఫంక్షన్ oldFunction() { // ...}
- \Dom\HTMLడాక్యుమెంట్ క్లాస్ అమలు చేయబడింది, HTML5 మార్కప్ యొక్క సరైన పార్సింగ్కు మద్దతు ఇస్తుంది.
- మల్టీపార్ట్/ఫారమ్-డేటా కంటెంట్ రకం (RFC1867)తో HTTP అభ్యర్థనలను అన్వయించడానికి request_parse_body() ఫంక్షన్ జోడించబడింది.
- array_find(), array_find_key(), array_any() మరియు array_all() ఫంక్షన్లు జోడించబడ్డాయి. array_find() మరియు array_find_key() ఫంక్షన్లు శ్రేణిలోని మొదటి మూలకం లేదా కీని తిరిగి అందిస్తాయి, దీని కోసం వినియోగదారు పేర్కొన్న కాల్బ్యాక్ ఫంక్షన్ ద్వారా పేర్కొన్న చెక్ పని చేస్తుంది. array_any() మరియు array_all() ఫంక్షన్లు, ఏదైనా సరిపోలిన మూలకం మరియు అన్ని సరిపోలిన మూలకాలను తిరిగి అందిస్తాయి. ఉదాహరణకు, టైటిల్ ఫీల్డ్ 5 అక్షరాల కంటే పెద్దదిగా ఉన్న మొదటి మూలకాన్ని ప్రదర్శించడానికి, మీరు పేర్కొనవచ్చు: $firstMatch = array_find($posts, ఫంక్షన్ (పోస్ట్ $post) { return strlen($post->title) > 5; } ) ;
- తేదీ సమయం::getMicrosecond() మరియు DateTimeImutable::setMicrosecond($microsecond) మైక్రోసెకండ్ ఖచ్చితత్వంతో సమయాన్ని పొందడం మరియు సెట్ చేయడం కోసం పద్ధతులు, అలాగే DateTime::createFromTimestamp() పద్ధతిని జోడించారు.
- PDO (PHP డేటా ఆబ్జెక్ట్స్), డేటాబేస్లతో పని చేయడానికి ఒక వియుక్త ఇంటర్ఫేస్, నిర్దిష్ట DBMS డ్రైవర్లకు నిర్దిష్ట SQL పార్సర్లు మరియు సబ్క్లాస్లను సృష్టించే సామర్థ్యాన్ని జోడించింది. కొత్త ఉపవర్గాలు Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc మరియు Pdo\Sqlite జోడించబడ్డాయి.
- mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() మరియు bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(s) pcntl_getcpuaffinity(s) కొత్త ఫంక్షన్లు జోడించబడ్డాయి , pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
- నిష్క్రమణ మరియు డై ఆపరేషన్లను ఇప్పుడు పూర్తి స్థాయి ఫంక్షన్లుగా పిలవవచ్చు, వీటిని ఇతర ఫంక్షన్లకు ఆర్గ్యుమెంట్గా పంపవచ్చు. మునుపు, నిష్క్రమణ() మరియు డై() ఫంక్షన్ల ఫంక్షనాలిటీ చాలా పరిమితంగా ఉండేది, ఎందుకంటే అవి నిష్క్రమణ మరియు డై కీలకపదాలపై రేపర్లు.
- బఫర్ ఓవర్రన్ వల్నరబిలిటీలను ఉపయోగించడం మరింత కష్టతరం చేయడానికి, అలాగే టెంప్నామ్() ఫంక్షన్ ద్వారా సృష్టించబడిన ఫైల్ పేర్ల యాదృచ్ఛికీకరణను పెంచడానికి మార్పులు జోడించబడ్డాయి.
- డిఫాల్ట్ శూన్య విలువ కలిగిన ఫంక్షన్ పారామితులు స్వయంచాలకంగా శూన్య విలువలను కేటాయించడానికి అనుమతించబడే ప్రవర్తన నిలిపివేయబడింది. అటువంటి పారామితులు శూన్య విలువలను ఆమోదించడానికి, "?" ఉపసర్గ యొక్క స్పష్టమైన సూచన ఇప్పుడు అవసరం. ఉదాహరణకు, “ఫంక్షన్ సేవ్(బుక్ $బుక్ = శూన్యం) {}”కి బదులుగా మీరు “ఫంక్షన్ సేవ్(?బుక్ $బుక్ = శూన్యం) {}” అని పేర్కొనాలి.
- స్థిరాంకాలు E_STRICT, MYSQLI_REFRESH_*, విధులు mysqli_ping(), mysqli_kill(), mysqli_refresh(), పద్ధతులు mysqli::ping(), mysqli::kill(), mysqli::refresh(), “_ని ఉపయోగించగల సామర్థ్యం "తరగతి పేరు, కొన్ని DOMdocument మరియు DOMEntity లక్షణాలు. GMP తరగతి స్థిరాంకాలను పునర్నిర్వచించడం నిషేధించబడింది, దీని కోసం ఇప్పుడు "చివరి" కీవర్డ్ సెట్ చేయబడింది.
అదనంగా, మేము స్టాటిక్ ఎనలైజర్ PHPStan 2.0 విడుదలను గమనించవచ్చు, ఇది PHP కోడ్ను అమలు చేయకుండా మరియు యూనిట్ పరీక్షలను ఉపయోగించకుండా లోపాలను కనుగొనడానికి మిమ్మల్ని అనుమతిస్తుంది. ఎనలైజర్ 10 స్థాయిలను అందిస్తుంది, నిర్వచించబడని వేరియబుల్స్, తెలియని తరగతులు, విధులు మరియు పద్ధతులను గుర్తించడం వంటి ప్రాంతాలను కవర్ చేస్తుంది; వాదనలు మరియు రిటర్న్ విలువల రకాలను తనిఖీ చేయడం; కొన్ని రకాల సరైన ఉపయోగం; ఎప్పుడూ పిలవని కోడ్ యొక్క నిర్వచనం. ప్రాజెక్ట్ కోడ్ PHPలో వ్రాయబడింది మరియు MIT లైసెన్స్ క్రింద పంపిణీ చేయబడుతుంది.
మూలం: opennet.ru
