Codoloper

PHP 8 منتشر شده - چه چیزای جدیدی داره

PHP 8 منتشر شده - چه چیزای جدیدی داره  | عکس

PHP 8 چه چیز جدیدی دارد؟ سفری به مهم‌ترین تحولات این نسخه

PHP 8 در نوامبر 2020 منتشر شد و بدون شک یکی از بزرگ‌ترین به‌روزرسانی‌های تاریخ این زبان است. این نسخه مملو از ویژگی‌های جدید، بهبود کارایی و تغییرات ساختاری است که کدنویسی را لذت‌بخش‌تر، خوانایی کدها را بیشتر و اجرای برنامه‌ها را سریع‌تر می‌کند.

در ادامه، مهم‌ترین قابلیت‌های PHP 8 را با مثال بررسی می‌کنیم.


۱. کامپایلر JIT (Just-In-Time)

شاید مهم‌ترین تغییر فنی در PHP 8، افزوده شدن کامپایلر JIT باشد. در نسخه‌های پیشین، کد PHP همیشه به بایت‌کد تبدیل و سپس توسط ماشین مجازی Zend اجرا می‌شد. اما در PHP 8، JIT می‌تواند بخش‌هایی از کد را مستقیماً به زبان ماشین ترجمه کند.

نتیجه؟
در کارهای سنگین محاسباتی (مانند پردازش تصویر، شبیه‌سازی و عملیات ریاضی) تا ۳ برابر افزایش سرعت دیده می‌شود. البته برای برنامه‌های معمولی وب (مانند وردپرس یا لاراول)، بهبود سرعت چشمگیر نیست، اما پتانسیل بسیار بالایی برای کاربردهای خاص دارد.


۲. Attributes (نشانه‌گذاری‌های بومی)

تا پیش از PHP 8، برای افزودن متادیتا به کلاس‌ها و متدها مجبور بودید از DocBlock کامنت‌ها استفاده کنید (مثل @route در لاراول). اما PHP 8 Attributes را معرفی کرد: یک روش بومی و ساختاریافته برای نشانه‌گذاری کد.

مثال:

#[Route('/api/users', methods: ['GET'])]
class UserController {
    #[Inject]
    private UserRepository $repository;
}
 

این ویژگی باعث می‌شود ابزارهایی مانند Doctrine، Symfony و Laravel دیگر نیازی به پردازش کامنت‌ها نداشته باشند و کد تمیزتر و سریع‌تری داشته باشید.


۳. Named Arguments (آرگومان‌های نام‌دار)

با این قابلیت، هنگام فراخوانی تابع می‌توانید نام پارامترها را مشخص کنید. دیگر لازم نیست ترتیب پارامترها را حفظ کنید و همچنین می‌توانید از برخی پارامترهای اختیاری عبور کنید.

مثال:

 

این قابلیت به خصوص برای توابع با پارامترهای زیاد یا پیش‌فرض بسیار مفید است.


۴. Constructor Property Promotion

قبل از PHP 8، برای تعریف و مقداردهی پراپرتی‌های کلاس در سازنده، کد زیادی می‌نوشتید. حالا می‌توانید تعریف پراپرتی و مقداردهی آن را یکجا در آرگومان‌های سازنده انجام دهید.

قبلاً:

 

حالا در PHP 8:

 
 

کد بسیار کم‌حجم‌تر و خواناتر شده است.


۵. Match Expression (جایگزین بهتری برای Switch)

عبارت match شبیه switch است، اما با تفاوت‌های مهم:

  • نیاز به break ندارد.

  • مقدار بازگشتی دارد (می‌توانید نتیجه را به متغیر نسبت دهید).

  • مقایسه از نوع Strict (===) است.

مثال:

 
 

این روش خواناتر و امن‌تر از switch سنتی است.


۶. Nullsafe Operator

فرض کنید می‌خواهید به یک پراپرتی از یک آبجکت برسید، اما ممکن است خود آبجکت یا واسط‌ها null باشند. در PHP 8 با عملگر ?-> می‌توانید زنجیره‌ای از دسترسی‌ها را بدون نگرانی از خطای Null انجام دهید.

مثال:

 

اگر هرکدام از این مراحل null باشد، کل عبارت null برمی‌گرداند و خطایی رخ نمی‌دهد.


۷. انواع ترکیبی (Union Types)

حالا می‌توانید برای یک پارامتر یا خروجی بیش از یک نوع داده را مشخص کنید.

مثال:

 

این قابلیت امنیت نوع‌ها را به طرز چشمگیری افزایش می‌دهد.


۸. بهبود در توابع داخلی

  • str_contains(): بررسی وجود زیررشته در رشته

  • str_starts_with() و str_ends_with()

  • get_debug_type(): نمایش نوع واقعی متغیر (بر خلاف gettype() که گاهی گمراه‌کننده است)

مثال:

 

دیگر نیازی به استفاده از strpos() !== false نیست.


۹. Weak Maps

نقشه‌های ضعیف (Weak Maps) به شما اجازه می‌دهند اشیاء را به عنوان کلید در یک آرایه ذخیره کنید، بدون اینکه مانع از پاک شدن آن شیء توسط گاربیج کالکتور شوند. این ویژگی برای پیاده‌سازی کش و سیستم‌های ذخیره‌سازی موقت عالی است.


۱۰. TypeError بهبودیافته

حالا خطاهای نوع در توابع دقیق‌تر و کمک‌کننده‌تر هستند. پیغام خطا نشان می‌دهد دقیقاً چه نوعی انتظار می‌رفته و چه نوعی دریافت شده است.


جمع‌بندی: آیا به PHP 8 ارتقا دهید؟

پاسخ بله است، اما با رعایت نکات:

  • برنامه‌های قدیمی ممکن است با تغییرات ناسازگار (مانند حذف برخی توابع) مواجه شوند.

  • اکثر فریمورک‌های محبوب (Laravel، Symfony، WordPress) از PHP 8 پشتیبانی کامل دارند.

  • افزایش سرعت، کدنویسی خواناتر و کاهش خطاهای رایج ارزش ارتقا را دارد.

PHP 8 سنگی محکم در مسیر تکامل این زبان است. اگر هنوز از PHP 7 استفاده می‌کنید، زمان مناسبی است برای مهاجرت به PHP 8 یا حتی PHP 8.1 و 8.2 که بهبودهای بیشتری نیز ارائه داده‌اند.

برامون کامنت بزار