این مقاله به بررسی تغییرات PHP 9.0 و تاریخ انتشار PHP 9.0 میپردازد. قصد داریم در خصوص ویژگیهای جدید PHP 9.0، حذفیات PHP 9.0 و سایر موارد این نسخه صحبت کنیم.
نحوه نصب و آزمایش PHP 9.0
تا به امروز هیچ کار عملی بر روی PHP 9.0 آغاز نشده است، بنابراین حتی نمیتوانید کد آخرین نسخه را از مخزن گیت رسمی پروزه PHP دانلود کرده و خودتان آن را کامپایل کنید.
ویژگیهای جدید PHP 9.0
بهبود عملگرهای افزایشی و کاهشی
PHP 9.0 در حال پاکسازی نحوه عملکرد عملگرهای ++
و --
است. این تغییرات شامل موارد زیر هستند:
- از این پس رشتهها (strings) دچار افزایش یا کاهش عجیب نخواهند شد. همانطور که در مثال زیر میبینید اگر مقداری متغیری برابر a9 بود، با افزایش آن به b0 تغییر میکرد. در نسخه PHP 9.0 استفاده از چنین عملگری برای رشتهها باعث ایجاد خطای نوع داده خواهد شد.
// PHP 8 و نسخههای قبلی $foo = 'a9'; $foo++; echo $foo; // Outputs: 'b0' // PHP 9 $foo = 'a9'; $foo++; // نمایش خطایTypeError
- بولینها و null به عنوان اعداد در نظر گرفته خواهند شد. همانطور که میبینید در PHP 9.0 استفاده از عملگر افزایشی ++ باعث میشود که متغیری که مقدار آن true بوده به عدد ۲ تغییر کند.
// PHP 8 و نسخههای قبلی $bar = true; $bar++; var_dump($bar); // خروجی: bool(true) // PHP 9 $bar = true; $bar++; var_dump($bar); // خروجی: int(2)
- رشتههای خالی بهطور معجزهآسا به اعداد تبدیل نخواهند شد. همانطور که در مثال زیر میبینید اگر یک رشته خالی (null string) را بخواهید زیاد کنید با ارور تایپ مواجه خواهید شد.
// PHP 8 و نسخههای قبلی $baz = ''; $baz--; var_dump($baz); // خروجی: int(-1) // PHP 9 $baz = ''; $baz--; // نمایش خطای TypeError
همانطور که دیدید این تغییرات باعث میشود که PHP 9.0 قابل پیشبینیتر شود. همین مسئله باعث افزایش درک برنامهنویسها و بالارفتن خوانایی کد خواهد شد و از پیچیدگیهای یادگیری زبان PHP میکاهد. اگر هنوز علاقه دارید از روشهای قبلی استفاده کنید میتوانید از تابع str_increment()
استفاده کنید.
استثناها در خطاهای غیرسریالی کردن
در PHP 9.0، خطاهای غیرسریالی کردن از `E_NOTICE` به `E_WARNING` ارتقا مییابند و به `UnserializationFailedException` تبدیل میشوند.
### امضای سادهشده توابع
PHP 9 توابع را سادهتر میکند تا فهمیدن و استفاده از آنها آسانتر باشد. به عنوان مثال:
“`php
// PHP فعلی
$allKeys = array_keys($myArray);
$specificKeys = array_keys($myArray, ‘searchValue’, true);
// PHP 9
$allKeys = array_keys($myArray);
$specificKeys = array_keys_filter($myArray, ‘searchValue’, true);
“`
### حذف آرایهها از مقادیر نادرست
PHP 9 در مورد نحوه ایجاد آرایهها سختگیرتر خواهد بود. به عنوان مثال:
“`php
$arr = false;
$arr[] = 2; // خطا: Cannot use a scalar value as an array
“`
### سادهسازی درج متغیرها در رشتهها
PHP 9 نحوه قرار دادن متغیرها در رشتهها را سادهتر میکند. گزینههای پیچیده حذف خواهند شد.
تبدیل هشدارها به خطاها
برای افزایش reliability (اطمینانپذیری) PHP، هشدارهای (warning) مربوط به متغیرها و propertyهای تعریفنشده اکنون به خطا (error) تبدیل خواهند شد. برای مثال کد زیر در PHP 9.0 اجرا نخواهد شد:
// PHP 8.x: "Warning: Undefined variable $foo" // PHP 9.0: "Fatal error: Uncaught Error: Undefined variable '$foo'" echo $foo;
همچنین، طوری که ما متوجه شدیم این تغییرات باعث میشود که خوانایی کد راحتتر شود و زندگی برای برنامهنویسان لذتبخشتر خواهد شد 🙂
برای اطلاعات بیشتر RFCهای زیر را مطالعه فرمایید:
حذف ویژگیهای منسوخ شده از نسخههای قبلی
ویژگیهایی که در نسخههای PHP 8.1، PHP 8.2، PHP 8.3 و PHP 8.4 منسوخ شدهاند، در نهایت در PHP 9.0 حذف خواهند شد.
در اینجا لیستی از RFCهای مربوط را گردآوری کردیم:
- PHP RFC: Deprecations for PHP 8.1
- PHP RFC: Deprecations for PHP 8.2
- PHP RFC: Deprecations for PHP 8.3
- PHP RFC: Deprecations for PHP 8.4
تاریخ انتشار PHP 9.0
در حال حاضر، زمان مشخصی برای انتشار PHP 9.0 اعلام نشده است. ممکن است قبل از آن PHP 8.5 و PHP 8/6 منتشر شوند ولی نسخه ۹.۰ هنوز در آیندهای دور قرار دارد.