نگاه سریع به تغییرات PHP نسخه ۸ : ویژگی ها و کارایی (بخش اول)
حسن  خسروجردی

 با سلام خدمت شما همراه عزیز سایت تاپ لرن.با یک مقاله دیگه از دنیای PHP در خدمت شما هستیم.

 

PHP نسخه ۸ ، نسخه اصلی بعدی PHP است که انتظار می رود تا پایان سال جاری (2020) منتشر شود. با توجه به محبوبیت سری PHP 7 ، توسعه دهندگان انتظار بیشتری از نسخه PHP 8 دارند. در ادامه نگاهی به تغییرات و ویژگی های این ورژن میکنیم.

 

Just In Time (JIT) Compiler (RFC)

 

کامپایلر Just In Time برنامه ای است که bytecode را به machine ترجمه می کند ، که سپس توسط پردازنده مستقیماً اجرا می شود. این کار به طور قابل توجهی عملکرد را بهبود می بخشد. اگرچه PHP 7 برای بهبود عملکرد تقریبا دو برابر نسبت به PHP 5 بهینه شده است ، اما هنوز هم جایی برای بهبود عملکرد با استفاده از JIT وجود دارد. JIT باعث می شود که bench.php دو برابر سریعتر اجرا شود : 0.140 ثانیه در مقابل 0.320 ثانیه. همچنین  PHP-Parser در حدود 1.3 برابر سریعتر شد.

با این حال ، JIT برنامه های real-life مانند WordPress را بهبود نمی بخشد. تیم توسعه PHP در تلاش هستند تا عملکرد PHP JIT را در برنامه های real-life بهبود بخشند.

 

 

 

 

Union Types (RFC)

 

Union Types به جای یک نوع واحد , دو یا چند نوع متفاوت را می پذیرد و نشان می دهد که می توان از یکی از این انواع استفاده کرد. نحوه استفاده از آن بصورت : T1 | T2 |… است. و در هر جایی که types یا نوع  مشخص شود قابل استفاده است.

 

 

توجه داشته باشید که از void نمی توان با Union Types استفاده کرد زیرا این امر "نوع بازگشتی" را نشان نمی دهد. همچنین ، با استفاده از | null ، می توان nullable را با Union Types استفاده کرد.

 

 

 

 

Weak Maps (RFC)

 

این ویژگی برای ایجاد یک ارجاع (اشاره به منبع یا Reference) به صورت ضعیف هست. در بخش های مختلف برنامه، برای افزایش سرعت عملکرد کار، حافظه های پنهان تحت عنوان Catch ایجاد میشود که به اون اشیاء یا کلاس ها اشاره می کنند. حالا تصور کنید لازم باشد که آن اشیاء یا کلاس ها حذف شوند، به دلیل اینکه یک Reference به آنها وجود دارد، عمل حذف اون شی با خطا مواجه خواهد شد.

همانطور که از نام آن مشخص است اگر از Weak maps برای ایجاد و ساخت Reference به شیء خاصی استفاده کنیم در واقع یک ارجاع ضعیف ساخته اید و هنگام حذف اون شی خطایی رخ نخواهد داد. درواقع خود PHP به صورت خودکار این عمل حذف رو هنگامی که Reference دیگری (بجز Weak maps) وجود نداشته باشد، حذف می کند و وجود یا عدم وجود Weak maps ها رو لحاظ نمی کند.

 

 

fdiv function PR

 

تابع ()fdiv بخشی از خانواده ()fmod() / intdiv است که امکان تقسیم صفر را فراهم می کند. با تقسیم صفر ، خطایی به وجود نخواهد آمد. در عوض ، بسته به طرز استفاده ، INF ، -INF یا NAN را برمی گرداند.

 

 

 

Consistent Type Errors (RFC)

 

تا به امروز توابعی که توسط کابران تعریف می شد، در صورت بروز هرگونه خطا، TypeError برگردانده می شد اما برای توابع داخلی اخطار (Warning) و مقدار Null در خروجی قرار می گرفت.  اما اکنون در PHP ورژن 8 برای توابع داخلی نیز TypeError برگردانده میشود.

 

 

 

Concatenation Precedence (RFC)

 

در نسخه فعلی PHP ، عبارات با اپراتورهای "+" ، "_" و "." , به صورت چپ به راست ارزیابی میشوند. برای مثال ، زیر را در نظر بگیرید 

 

 

این عبارت به شکل زیر تعبیر میشود 

 

 

 RFC پیشنهاد می کند که جمع و تفریق نسبت به الحاق ( concatenation ) از اولویت بالاتری برخوردار است. بنابراین ، در PHP 8 عبارت فوق به شکل زیر تعبیر می شود 

 

 

 

 

 

در بخش بعدی با قسمت (دوم) از این مقاله با ما همراه باشید.

نظرات کاربران در رابطه با این دوره

جهت ثبت نظر باید در سایت عضو شوید و یا وارد سایت شده باشید .
logo-samandehi