PHP 8.1 પ્રોગ્રામિંગ ભાષાનું પ્રકાશન

વિકાસના એક વર્ષ પછી, PHP 8.1 પ્રોગ્રામિંગ ભાષાનું પ્રકાશન રજૂ કરવામાં આવ્યું. નવી શાખામાં નવી સુવિધાઓની શ્રેણી, તેમજ સુસંગતતાને તોડતા ઘણા ફેરફારોનો સમાવેશ થાય છે.

PHP 8.1 માં મુખ્ય સુધારાઓ:

  • ગણતરીઓ માટે ઉમેરાયેલ આધાર, ઉદાહરણ તરીકે, તમે હવે નીચેની રચનાઓનો ઉપયોગ કરી શકો છો: enum Status { case Pending; કેસ સક્રિય; કેસ આર્કાઇવ; } વર્ગ પોસ્ટ { પબ્લિક ફંક્શન __કન્સ્ટ્રક્ટ (ખાનગી સ્ટેટસ $સ્ટેટસ = સ્ટેટસ::પેન્ડિંગ; ) {} પબ્લિક ફંક્શન સેટસ્ટેટસ(સ્ટેટસ $સ્ટેટસ): વોઈડ { // … } } $પોસ્ટ->સેટ સ્ટેટસ(સ્ટેટસ:: એક્ટિવ);
  • ફાઇબર્સ નામના હળવા વજનના થ્રેડો માટે સપોર્ટ ઉમેર્યો, જે તમને નીચા સ્તરે એક્ઝેક્યુશન થ્રેડોનું સંચાલન કરવાની મંજૂરી આપે છે. ફાઇબર સપોર્ટને Amphp અને ReactPHP ફ્રેમવર્કમાં ઉમેરવાની યોજના છે. $fiber = નવું ફાઇબર(ફંક્શન (): void { $valueAfterResuming = Fiber::suspend('sspend કર્યા પછી'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber-> ફરી શરૂ કરો ('ફરી શરૂ કર્યા પછી');
  • ઑબ્જેક્ટ કોડ કેશ (ઓપકેશ) ના અમલીકરણમાં સુધારો કરવામાં આવ્યો છે, જે વર્ગ વારસા વિશેની માહિતીને કેશ કરવાનું શક્ય બનાવે છે. ઑપ્ટિમાઇઝેશનને કારણે કેટલીક એપ્લિકેશનોની કામગીરીમાં 5-8% વધારો કરવાનું શક્ય બન્યું છે. અન્ય ઑપ્ટિમાઇઝેશનમાં JIT ઑપરેશનનું ઑપ્ટિમાઇઝેશન, ARM64 આર્કિટેક્ચર (AArch64) માટે JIT સપોર્ટનું અમલીકરણ, નામ રિઝોલ્યુશનની પ્રવેગકતા, ટાઇમલિબ અને એક્સ્ટ/ડેટ લાઇબ્રેરીઓનું ઑપ્ટિમાઇઝેશન, શ્રેણીબદ્ધતા અને ડિસિરિયલાઇઝેશન પર્ફોર્મન્સમાં વધારો, get_declared_classes() નું ઑપ્ટિમાઇઝેશન (), એક્સપ્લોઇઝેશનનો સમાવેશ થાય છે. , strtr() ફંક્શન, strnatcmp(), dechex(). સામાન્ય રીતે, સિમ્ફોની ડેમો માટે પ્રદર્શનમાં 23.0% અને WordPress માટે 3.5% વધારો છે.
  • એરેની અંદર અનપેકિંગ ઓપરેટર "...$var", જે નવા એરેને વ્યાખ્યાયિત કરતી વખતે વર્તમાન એરેને બદલવાની મંજૂરી આપે છે, તેને સ્ટ્રિંગ કીને સપોર્ટ કરવા માટે વિસ્તૃત કરવામાં આવ્યું છે (અગાઉ માત્ર ડિજિટલ ઓળખકર્તાઓને સપોર્ટ કરવામાં આવતો હતો). ઉદાહરણ તરીકે, તમે હવે કોડમાં ઉપયોગ કરી શકો છો: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • તેને ઇનિશિયલાઇઝર્સમાં "નવા" કીવર્ડનો ઉપયોગ કરવાની મંજૂરી છે, જેમ કે ડિફોલ્ટ પેરામીટર તરીકે ફંક્શન વ્યાખ્યાઓમાં અથવા દલીલ વિશેષતાઓમાં. વર્ગ MyController { જાહેર કાર્ય __construct( ખાનગી લોગર $logger = new NullLogger(), ) {} }
  • ફક્ત-વાંચવા માટેની ઍક્સેસ માટે વર્ગ ગુણધર્મોને ચિહ્નિત કરવું શક્ય છે (આવા ગુણધર્મોમાં માહિતી ફક્ત એક જ વાર લખી શકાય છે, તે પછી તે ફેરફાર માટે ઉપલબ્ધ રહેશે નહીં). વર્ગ પોસ્ટડેટા { પબ્લિક ફંક્શન __કન્સ્ટ્રક્ટ( પબ્લિક રીડ ઓનલી સ્ટ્રિંગ $title, પબ્લિક રીડ ઓનલી DateTimeImmutable $date, ) {} } $post = નવી પોસ્ટ('Title', /* … */); $post->શીર્ષક = 'અન્ય'; > ભૂલ: ફક્ત વાંચવા માટેની મિલકતમાં ફેરફાર કરી શકાતો નથી Post::$title
  • કૉલ કરી શકાય તેવા ઑબ્જેક્ટ્સ માટે એક નવો વાક્યરચના લાગુ કરવામાં આવી છે - હવે ફંક્શનને કૉલ કરીને અને તેને "..." વેલ્યુ પસાર કરીને બંધ કરી શકાય છે (એટલે ​​​​કે Closure::fromCallable('myFunc) ને બદલે દલીલ તરીકે (એટલે ​​​​કે myFunc(...) ')): ફંક્શન foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • આંતરછેદ પ્રકારો માટે સંપૂર્ણ સમર્થન ઉમેર્યું, તમને હાલના પ્રકારોને જોડીને નવા પ્રકારો બનાવવાની મંજૂરી આપે છે. યુનિયન પ્રકારોથી વિપરીત, જે બે કે તેથી વધુ પ્રકારોના સંગ્રહને વ્યાખ્યાયિત કરે છે, આંતરછેદના પ્રકારોને સૂચિબદ્ધ પ્રકારોમાંથી કોઈપણની હાજરીની જરૂર નથી, પરંતુ ભરવા માટેના સમૂહમાં ઉલ્લેખિત તમામ પ્રકારોની હાજરી જરૂરી છે. ફંક્શન generateSlug(HasTitle&HasId $post) { રીટર્ન strtolower($post->getTitle()) . $post->getId(); }
  • એક નવો પ્રકાર "ક્યારેય નહીં" છે જેનો ઉપયોગ સ્ટેટિક વિશ્લેષકોને જાણ કરવા માટે થઈ શકે છે કે ફંક્શન પ્રોગ્રામ એક્ઝેક્યુશનને સમાપ્ત કરશે, ઉદાહરણ તરીકે અપવાદ ફેંકીને અથવા એક્ઝિટ ફંક્શનને એક્ઝિક્યુટ કરીને. ફંક્શન ડીડી (મિશ્ર $ઇનપુટ): ક્યારેય { બહાર નીકળો નહીં; }
  • એક નવું ફંક્શન array_is_list પ્રસ્તાવિત કરવામાં આવ્યું છે, જે તમને એ નક્કી કરવા દે છે કે એરેમાંની ચાવીઓ સંખ્યાત્મક મૂલ્યો વધારવાના ક્રમમાં ગોઠવાય છે, 0 થી શરૂ થાય છે: $list = [“a”, “b”, “c”]; array_is_list($list); // સાચું $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // ખોટા
  • તમે હવે "અંતિમ" કીવર્ડનો ઉપયોગ પેરેંટ ક્લાસ કોન્સ્ટન્ટ્સને ઓવરરાઇડ થતા અટકાવવા માટે કરી શકો છો. વર્ગ Foo { અંતિમ જાહેર કોન્સ્ટ X = "foo"; } વર્ગ બાર ફૂ { પબ્લિક કોન્સ્ટ X = "બાર" વિસ્તરે છે; > ઘાતક ભૂલ: બાર::X અંતિમ સ્થિર સ્થિર Foo::X }ને ઓવરરાઇડ કરી શકતું નથી
  • fsync અને fdatasync વિધેયો ડિસ્ક કેશમાંથી સાચવવા માટે ફેરફારોને દબાણ કરવા માટે પ્રસ્તાવિત છે. $file = fopen("sample.txt", "w"); fwrite($file, "કેટલીક સામગ્રી"); જો (fsync($file)) { echo "ફાઇલ સફળતાપૂર્વક ડિસ્ક પર ચાલુ રાખવામાં આવી છે."; } fclose($file);
  • અગાઉ વપરાતા ઉપસર્ગ "0" ઉપરાંત, ઓક્ટલ નંબરો માટે "0o" અને "0O" ઉપસર્ગનો ઉપયોગ કરવાની ક્ષમતા ઉમેરવામાં આવી છે. 016 === 0o16; // સાચું 016 === 0O16; // સાચું
  • $GLOBALS ના ઉપયોગને પસંદગીયુક્ત રીતે મર્યાદિત કરવાનો પ્રસ્તાવ છે, જે પછાત સુસંગતતાના ઉલ્લંઘન તરફ દોરી જશે, પરંતુ એરે સાથેની કામગીરીને નોંધપાત્ર રીતે ઝડપી બનાવવાનું શક્ય બનાવશે. ઉદાહરણ તરીકે, $GLOBALS પર લખવાનું અક્ષમ કરવાની અને $GLOBALSને પોઇન્ટર દ્વારા પાસ કરવાની શક્યતા પર વિચાર કરવામાં આવી રહ્યો છે. 2000 પેકેજોના વિશ્લેષણ દર્શાવે છે કે તેમાંથી માત્ર 23 જ આ ફેરફારથી પ્રભાવિત થશે. ઉદાહરણ તરીકે, જો દરખાસ્ત મંજૂર થાય, તો 8.1 હવે અભિવ્યક્તિઓને સમર્થન આપશે નહીં જેમ કે: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $ગ્લોબલ; અનસેટ($GLOBALS); by_ref($GLOBALS);
  • આંતરિક પદ્ધતિઓ હવે યોગ્ય પ્રકાર પરત કરીશું. PHP 8.1 માં, ફંક્શન ઘોષણા સાથે મેળ ખાતો ન હોય તેવા પ્રકારને પરત કરવાથી ચેતવણી મળશે, પરંતુ PHP 9.0 માં ચેતવણીને ભૂલથી બદલવામાં આવશે.
  • સંસાધનોના ઉપયોગથી લઈને વસ્તુઓની હેરફેર સુધીના કાર્યોને સ્થાનાંતરિત કરવાનું કામ ચાલુ રાખ્યું. finfo_* અને imap_* કાર્યોને ઑબ્જેક્ટમાં સ્થાનાંતરિત કરવામાં આવ્યા છે.
  • બિન-ન્યુલેબલ તરીકે ચિહ્નિત થયેલ આંતરિક કાર્યોમાં દલીલો તરીકે નલ મૂલ્યો પસાર કરવાનું નાપસંદ કરવામાં આવ્યું છે. PHP 8.1 માં, str_contains("string", null) જેવી રચનાઓનો ઉપયોગ ચેતવણી તરફ દોરી જશે, અને PHP 9 માં ભૂલ તરફ દોરી જશે.
  • MurmurHash3 અને xxHash હેશિંગ અલ્ગોરિધમ્સ માટે ઉમેરાયેલ સપોર્ટ.

સોર્સ: opennet.ru

એક ટિપ્પણી ઉમેરો