ویژگی های جدید در PHP 8

ویژگی های جدید در PHP 8 چیست؟
Avatar
نویسنده: علیرضا برزودی
یکشنبه 13 تیر 1400
مطالعه: ۸ دقیقه ۰ نظر ۱۲۲۱ بازدید

از آن جایی که این ورژن، یک نسخه اساسی و بسیار مهم می باشد، باید انتظار تغییرات گسترده و ویژگی هایی جدیدی را در PHP 8 داشت. دانستن خصوصیات و مشخصات PHP 8 به شما کمک خواهد کرد تا به شکل راحت تری به این موضوع فکر کنید که این نسخه چگونه روی اپلیکیشن های شما اثر خواهد گذاشت و چه اقداماتی لازم است از سوی شما صورت بگیرد تا اطمینان حاصل شود که این ارتقا بدون مشکل و به بهترین و صحیح ترین شکل صورت می گیرد.با توجه به قابلیت ارتقای نسخه php در هاست، در این مقاله سعی کرده ایم تا برخی از اساسی ترین تغییرات این نسخه را مورد بررسی قرار داده و ببینیم چه ویژگی های جدیدی قرار است در ورژن PHP 8 به ما ارائه شود.

ویژگی هایی که در نسخه PHP 8 اضافه شده

str_contains

به طور کلی شما از strpos() استفاده می نمایید. همان طور که می دانید، strops() در میان انبار کاه، سوزنی را پیدا می کند که شما به دنبال آن هستید. در حقیقت، نخستین موقعیتی را که سوزن مورد نظر در آن مشاهده شده به شما نشان می دهد. اکنون، با نسخه جدید دیگر امکان بررسی این که آیا strpos() موفق بود سوزن را پیدا کند یا خیر وجود ندارد. در عوض، در صورتی که به شما پیام 0 را نشان دهد، آن گاه به صورت یک مقدار منفی یا false در نظر گرفته می شود. به زبان ساده تر، هنگامی که با مقدار 0 مواجه شدید، یعنی strpos() نتوانسته است سوزن مورد نظر شما را بیابد.

نمایش Boolean

به طور کلی، شما باید یک سری مقادیر شرطی مانند -“strpos($haystack, $needle) !== false.” بنویسید. مقدار false نشان دهنده این است که امکان پیدا کردن موقعیت string وجود نداشته است. این شیوه بسیار مستور و ناواضح است اگرچه چندان گیچ کننده نمی باشد. برای پیشگیری از چنین مشکلاتی، در نسخه PHP 8 از str_contains() استفاده می شود. وظیفه str_contains() این است که یک مقدار Boolean را به شما نشان دهد. این که آیا سوزن در انبار کاه بود یا خیر. نوشتن چنین کدی بسیار ساده تر و برای فردی که کد را کنترل می کند قابل فهم تر می باشد.

ویژگی های جدید و تغییرات PHP 8

آشنایی با ویژگی های جدید php 8
معرفی ویژگی های جدید php 8

خصوصیات جدیدی به PHP 8 اضافه شده اند و همچنین، تغییراتی در آن مشاهده می شود. شاید بتوان گفت که بدون شک اصلی ترین این ویژگی های جدید، JIT compiler می باشد:

  • compiler JIT
  • اجرای LSP
  • خطا های حیاتی در متد های ناسازگار
  • Resource “Classes“
  • هم اکنون در نسخه جدید XML-RPC در PECL است
  • رفتار موکد
  • تغییرات Reflection

ما در این مقاله تنها به موارد اصلی این فهرست یعنی JIT compiler، ResourceClasses” و در نهایت تغییرات API Reflection می پردازیم.

قابلیت Just In Time Compiler

به سبب بهبود سرعت که پیش از انتشار PHP 7 صورت گرفت، قابلیت جدیدی به نام Just In Time (JIT) Compiler پدید آمد. این ویژگی در PHP 8 معرفی شد زیرا امکان بهبود بیشتر سرعت بدون استفاده از آن وجود نداشت. در حقیقت هدف از این قابلیت افزایش کارایی و عملکرد PHP می باشد. هنگام اجرا، کد های PHP به کد های بایتی ترجمه می شوند و از این کد های بایتی نیز برای اجرای مراحل گوناگون در برنامه استفاده می شود. در آخر PHP کد هایی که شما اجرا کردید را آنالیز و بررسی می کند. این همان معنای JIT می باشد. در ادامه، این ویژگی می تواند علاوه بر بهبود عملکرد کد هایی که اجرا کردید، تصمیماتی بی درنگ بگیرد. تنها استفاده این موضوع در برنامه های مبتنی بر وب نیست و افزون بر آن در برنامه هایی که به نیروی پردازش زیادی نیاز دارند فوق العاده کاربردی خواهد بود.

زمان اجرای تابع microtome

زمان اجرای سریع در php 8
زمان کوتاه اجرای توابع در php 8

ما متوجه شدیم که تعدادی از کاربران در تلاش بودند تا این ویژگی جدید در PHP 8 را تحت آزمایش و بررسی قرار دهند و تفاوت هایی که ایجاد می کند را نشان بدهند. ما از نتایج آزمایشات این افراد استفاده کردیم تا ببنیم استفاده از تابع microtome() چقدر طول می کشد. در زیر نتیجه این آزمایش برای ورژن PHP 7.4.8 و نسخه جدید تر PHP 8 آمده است:

Burningship - 84.20269203186  Burningship - 15.272277116776
Mandlebrot – 21.552599906921  Mandlebrot -3.7528541088104
Tricorn – 32.685042858124  Tricorn -4.4957919120789

با توجه به نتایج، مشاهده می کنید که افزایش سرعت قابل توجهی رخ داده و این موضوع بسیار جالب و خوشایند است. کدی که ما استفاده کردیم فراکتال هایی با اندازه بزرگ ایجاد می کنند اما به یاد داریم که هنگام نوشتن این کد، بیشتر زمان خود را صرف انتظار برای ایجاد شدن این فراکتال ها کردیم.
به هر حال، این ویژگی جدید بسیار هیجان انگیز بوده و در برخی موارد مرز های PHP را جا به جا کرده است. کاملا می توان حدس زد که JIT Compliler تا چه اندازه به PHP 8 مفید و سودرسان خواهد بود و به این زبان اجازه خواهد داد تا برای شرایطی خارج از زبانی عادی برای وب سایت به کار برده شود.

Resource “Classes”

  • Resource “Classes” به عنوان فهرستی از تغییرات در PHP 8 مشاهده خواهد شد و به عنوان یک جایگزین غیر قابل نمونه سازی برای گونه های منابع خاص خواهد بود. جایگزین های موجود به شرح زیر است:
  • CurlHandle – از این پس curl_init()، CurlHandle را بازگشت می دهد که به یک منبع Curl مربوط می شود.
  • سوکت / اطلاعات آدرس – با توجه به افزونه سوکت ها، مقدار تابع های socket_*() به شما یک سوکت تحویل می دهند. این درحالی است که تابع socket_adderss_info_lookup() به شما اطلاعات آدرس یا AddressInfo را پاسخ می دهد.
  • GdImage – این مورد بیانگر یک منبع GD می باشد که توسط تعداد زیادی از توابع imagecreateform*() بازیابی می شود.

علاوه بر آن، بسیار مهم است که بدانید این منابع توسط توابعی همچون curl_close() از بین نمی روند. بنابراین، باید با استفاده از تابع unset()، آدرس دهی را باز گردانده تا به یک متغیر نمونه تبدیل شود. شما این امکان را خواهید داشت که کلاس های مختلف را به عنوان typehint در توابع و متد های خود مشخص کنید.

افزایش امنیت و خوانایی کد های PHP 8

امنیت در php 8
داشتن امنیت بالا در php 8 

کمی قبل تر، ما مجبور بودیم مقادیر را بدون تیپ بازگردانیم و یا معادلات را به صورت منابع رها کنیم و آن ها را از طریق حاشیه نویسی به اثبات برسانیم. اما در نسخه جدید، شما این اجازه را دارید که تیپ های صریح داشته باشید و این نه تنها کد شما را خوانا تر و قابل درک تر می کند، بلکه امنیت آن را نیز بالاتر می برد. بنابراین، در PHP 8 باید کد های خود را به روز رسانی کنید تا بتوانید به جای تابع های قدیمی که از کار افتاده اند، منابع را به کمک unset() از بین ببرید. این مسئله به صورت عادی از طریق جست و جو و جایگزینی امکان پذیر می باشد.

تغییرات Reflection API

یک تغییر جزئی دیگر که می تواند نقش بسیار مهم و حیاتی در PHP 8 داشته باشد مربوط به Reflection API می باشد. هنگامی که از سیستم مقادیر استفاده می کند، می توانید به راحتی این مقادیر را از طریق Reflection API یا هر گروه Reflection دیگری به دست آورید. با اضافه شدن گروه های ترکیبی و متحد، تکنیک های پارامتر های Reflection، تابع getClass()، تابع isCallable() و تابع isArray اگرچه همچنان قابل استفاده می باشند اما دیگر کاربرد سابق را نداشته و بهتر است از آن ها استفاده نشود. این موضوع به این سبب است که استفاده از تابع getType() بسیار بهتر و کاربردی تر است و با استفاده از آن شما یک فهرست کامل از تیپ هایی که یک پارامتر مشخص را کامل می کند به دست می آورید.

جمع بندی و نکات نهایی

بدون شک تغییرات مهمی در نسخه جدید PHP 8 صورت گرفته است و به نظر می رسد غالب کد هایی که منسوخ شده اند به دلیل ویژگی های قدیمی تری بوده که اخیرا استفاده چندانی از آن ها نمی شد. ما بسیار مشتاق هستیم تا تأثیر این ویژگی های جدید و به ویژه موتور JIT را در PHP 8 مشاهده کنی. همچنین مشتاقیم ببینیم این خصوصیات جدید روی پایگاه داده ها و به طور کلی جامعه PHP چه اثری خواهد داشت و کاربران چگونه از آن استقبال خواهند کرد. ما به شدت توصیه می کنیم که شما پیش از این که این به روز رسانی را روی برنامه خود اعمال کنید، ابتدا به منظور یافتن ناسازگاری های کد هایتان با PHP 8، آن را به خوبی بررسی کرده و اطمینان حاصل فرمایید که نرم افزار PHP شما به خوبی با این نسخه کار خواهد کرد.