در مباحث گذشته به مطالبی مثل PHP چیست و پایان عمر برای php 5.6 و PHP 7 اشاره کردیم. اگر با این مطالب آشنایی ندارید به شما پیشنهاد میکنیم اول سری به اینها بزنید.
PHP 8 در ۲۶ نوامبر ۲۰۲۰ منتشر شده است. PHP 8 یک نسخه اصلی و جدید است به این معنی که تغییرات اساسی و همچنین بسیاری از ویژگی های جدید و بهبود عملکرد در آن وجود دارد. به این علت که در این نسخه تغییراتی وجود دارد احتمالا شما نیز برای استفاده از آن نیاز به تغییرات اساسی داشته باشید، اما اگر همواره با آخرین نسخه ها به روز رسانی کرده اید ارتقا برای شما کار سخت و پیچیده ای نباید باشد.
PHP چندین ویژگی اصلی جدید را برای PHP 8.0 به ارمغان میآورد ویژگیهایی مانند Named Parameters، JIT، Attributes و Constructor Properties باعث بهبودهای عمده و تغییرات میشوند.
Union Types یکی از ویژگی های ورژن جدید است که به شما اجازه میدهد تا Type های مختلفی برای توابع، متدها یا متغیرها تعریف کنید. در ورژن های قبلی، نوع فایل (یا متد) ورودی و خروجی، نمیتوانستند متفاوت باشند.
JIT مخفف(just in time) یعنی در زمان است، این به معنی آن است که به جای اینکه کد ها را کامپایل و سپس اجرا کند کدها را در لحظه اجرا (runtime) پردازش کرده و به زبان قابلفهم برای ماشین تبدیل میکند.
مقاله بعدی ما که به زودی کامل میشود به توضیح کاملی درباره این کامپایلر پرداخته ایم و به شما پیشنهاد میکنیم که به مقاله کامپایلر JIT حتما رجوع کنید.
Attributes اجازه می دهد تا متا داده ها(meta-data) را برای توابع، کلاس ها، ویژگی ها و پارامترها اعلام کنید. در نسخههای پیشین، برای این کار در حین کد نویسی، از عملگر ‘doc_comments’ استفاده میشد.
در اینجا مثالی از ظاهر Attributes در RFC آورده شده است:
اگر با اپراتور (null coalescing) کار کرده باشید از قبل با کاستی های آن آشنا هستید.
حتماً میدانید که این اپراتور نمیتواند برای متدهایی که فقط یک آبجکت دارند، عمل کند. در صورت استفاده از این عملگر برای متدهای دارای یک آبجکت، با یک خطا تحت عنوان «this method is not defined!» روبرو خواهید شد.
با اضافه شدن عملگر nullsafe، اکنون می توانیم رفتاری شبیه به ادغام تهی روی متد ها داشته باشیم!
PHP 8 پارامترهای نامگذاری شده را در توابع میپذیرد. استفاده از این اپراتور کد شما را خوانا تر و قابل درک تر برای ماشین میکند. در واقع شما میتوانید به جای وارد کردن تمام آرگومان ها با ترتیب مشخص، با ذکر نام آرگومان مورد نیاز، آن را مقدار دهی کنید.
شما میتوانید Mach Expression را برادر بزرگ عملگر switch بنامید، میتواند مقادیر (values) را بازگرداند و نیازی به استفاده از breaks ندارید. عملکرد کلی match expression و switch یکسان است اما Match Expression ظاهری بهتر و کد خواناتری دارد، خروجی آن میتواند یا در متغیر ذخیره و یا به طور مستقیم بازگردانده شود.
تعریف تابع Constructor در نسخه جدید به شکل ساده تری انجام میشود. یک دستور جدید برای اعلام خصوصیات کلاس مستقیماً از سازنده کلاس است.
WeakMap مشابه SplObjectStorage است، زیرا در WeakMap و splObjectStorage از اشیاء به عنوان کلید استفاده می شود و اجازه ذخیره مقادیر دلخواه را می دهد. با این حال، WeakMap مانع از جمع آوری زباله نمی شود.