PHP 8.3 منتشر شد تا یکی از محبوبترین زبانهای برناههنویسی سمت سرور یعنی PHP به همه ثابت کند که همچنان در حال تکامل است. با انتشار PHP 8.3، موجی از ویژگی ها و پیشرفت های هیجان انگیز پدیدار شد که زندگی توسعهدهندگان را آسانتر و کد آنها را کارآمدتر می کند. در این مقاله جامع، به نکات کلیدی PHP 8.3 میپردازیم و بررسی میکنیم که این تغییرات چگونه میتوانند برای توسعهدهندگان و صاحبان وب سایت مفید باشند.
PHP 8.3 جدیدترین نسخه در دست توسعه از زبان برنامهنویس PHP است. PHP یک زبان برنامهنویسی همه منظوره محبوب است که مخصوصاً برای طرحی صفحات وب توسعه یافتهاست. تا ژانویهٔ سال ۲۰۱۳ میلادی (به شمسی دیماه ۱۳۹۱)، پیاچپی روی ۲۴۴ میلیون وبگاه و ۲٫۱ میلیون سرور وب نصب شدهاست. محبوبیت PHP اینقدر زیاد است که در سال ۲۰۲۳، پی اچ پی پرکاربردترین و محبوب ترین زبان برنامه نویسی سمت سرور است که به طور کلی تقریبا ۷۷ درصد از سهم بازار را به خود اختصاص داده است.
ویژگیهای جدید
Readonly
در PHP 8.3، ویژگی اصلاح Readonly اجازه میدهد تا پراپرتیهای فقط خواندنی را در طول شبیه سازی مجدداً آغاز کنید. این افزودنی به یک مورد لبه خاص می پردازد و شبیه سازی عمیق ویژگی های فقط خواندنی را امکان پذیر می کند. قبلاً، تخصیص مجدد مقادیر به ویژگی های فقط خواندنی در متد __clone() منجر به خطا می شد. با این حال، با این ویژگی جدید، توسعه دهندگان اکنون می توانند مقادیر را در ویژگی های فقط خواندنی در طول فرآیند شبیه سازی بازنویسی کنند و عملیات شبیه سازی عمیق را تسهیل کنند.
بهبود تابع range()
با استفاده از تابع range()
میتوان آرایهای از مقادیری که نوع یکسانی دارند شامل اعداد صحیح، اعداد شناور و رشتهها را تولید کرد. حتی برای مدیریت بهتر میتوان گامهای مشخص شدهای برای آن در نظر گرفت. برای درک بهتر کدهای زیر را بررسی کنید:
print_r(range(1, 5 )); /* Array( [۰] => 1 [۱] => 2 [۲] => 3 [۳] => 4 [۴] => 5 ) */ print_r(range(1, 5 , 2)); /* Array( [۰] => 1 [۱] => 3 [۲] => 5 ) */ print_r(range('A','H')); /* Array( [۰] => A [۱] => D [۲] => G ) */
با توجه به اینکه تابع range()
به ازای مقادیر خاصی از ورودیها، نتایج غیرمنتظرهای را نمایش میداد که در بهبودهای داده شده در PHP 8.3 به دنبال این است این خطاها را قابل پیش بینی تر و سازگارتر کند.
تغییرات اعمال شده عبارتند از:
- بررسی و پرتاب خطا زمانی که آرگومانهای غیرقابل استفاده به تابع
range()
ارسال می شوند. - مدیریت مقادیر شناور غیر محدود مانند
-INF
،INF
وNAN
- مدیریت خطای واضح و تشریحی هنگامی که گام رنج، صفر ارسال میشود.
- نمایش خطا هنگام تولید آرایهای از حروف با گام اعشاری.
- بررسی دقیقتری روی پارامترهای شروع و پایان انجام دهید تا مطمئن شوید که int، float یا string هستند. هر نوع دیگری منجر به TypeError می شود.
- فراخوانی های موجود به range() که آرایه های شناور را برمی گرداند، زمانی که گام می تواند یک عدد صحیح باشد، اکنون آرایه ای از اعداد صحیح را برمی گرداند.
تابع json_validate()
قبل از PHP 8.3، اعتبارسنجی اینکه آیا یک رشته JSON معتبر است نیاز به رمزگشایی رشته و بررسی هرگونه خطا داشت. با این حال، تابع جدید json_validate() در PHP 8.3 فرآیند را با اعتبارسنجی مستقیم رشته در برابر طرحوارههای از پیش تعریفشده ساده میکند و از دقت و سازگاری دادهها اطمینان میدهد. این تابع رویکرد کارآمدتری را برای اعتبارسنجی JSON ارائه میکند و بهویژه زمانی مفید است که فقط به نتیجه اعتبارسنجی نیاز باشد، نه رمزگشایی کل رشته JSON.
بگذارید با یک مثال توضیح دهیم. فرض کنید میخواهید ببینید که آیا متغیری که از نوع استرینگ است، جیسان ذخیره شده است یا خیر؟ برای این کار از چه روشی استفاده میکنید؟ به نظرم شما هم ناچارا از تابع json_decode()
استفاده میکنید. به مثال زیر دقت فرمایید:
<?php function is_JSON(...$args) { json_decode(...$args); return (json_last_error()===JSON_ERROR_NONE); } $Unrivaled = '{"site":"Unrivaled.ir"}'; if (is_JSON($Unrivaled)) { echo "Valid JSON string"; } else { $error = json_last_error_msg(); echo "Not valid JSON string ($error)"; }
همانطور که متوجه شدید ما مجبوریم با استفاده از تابع json_decode()
اعتبارسنجی جیسان را انجام دهیم اما با افزوده شدن تابع json_validate()
در PHP 8.3 به راحتی میتوانیم این اعتبارسنجی را انجام دهیم. برای درک بهتر ابتدا به خود تابع نگاه کنید تا در ادامه با بررسی مثال به درک عمیقتری برسیم.
json_validate(string $json, int $depth = 512, int $flags = 0): bool
حال مثال زیر را بررسی کنید:
<?php $Unrivaled = '{"site":"Unrivaled.ir"}'; if (json_validate($json)) { // Valid JSON. } else { // Invalid JSON. }
Anonymous Readonly Classes
PHP 8.3 قابلیت علامت گذاری کلاس های ناشناس را به عنوان فقط خواندنی معرفی می کند. قبلاً ویژگی های فقط خواندنی در کلاس های ناشناس پشتیبانی نمی شد. با این حال، با PHP 8.3، توسعهدهندگان اکنون میتوانند کلاسهای ناشناس با ویژگیهای فقط خواندنی ایجاد کنند و سطح بیشتری از یکپارچگی و تغییرناپذیری دادهها را فراهم کنند.
$class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
Randomizer Class
PHP 8.2 کلاس Randomizer را برای تولید اعداد تصادفی معرفی کرد. در PHP 8.3، کلاس Randomizer با روش های جدید بیشتر ارتقا یافته است. متد getBytesFromString()
به توسعهدهندگان اجازه می دهد تا رشته ای از بایت های تصادفی را از یک رشته معین تولید کنند، در حالی که متدهای getFloat()
و nextFloat()
اعداد ممیز شناور تصادفی را در محدوده های مشخص تولید می کنند.
$randomizer = new \Random\Randomizer(); $randomBytes = $randomizer->getBytesFromString( 'abcdefghijklmnopqrstuvwxyz0123456789', ۱۶ ); $randomFloat = $randomizer->getFloat(-89.2, 56.7); $nextFloat = $randomizer->nextFloat();
واکشی ثابتها
PHP 8.3 سینتکس پویاتری را برای واکشی ثابت های کلاس معرفی می کند. به جای استفاده از تابع ()stant، توسعه دهندگان اکنون می توانند مستقیماً به ثابت های کلاس با استفاده از نحو پویا دسترسی داشته باشند. این ویژگی کد را ساده می کند و آن را خواناتر می کند.
// PHP < 8.3 class Foo { const SITE = 'Unrivaled.ir'; } $name = 'SITE'; var_dump(constant(Foo::class . "::{$name}")); // PHP 8.3 class Foo { const SITE = 'Unrivaled.ir'; } $name = 'SITE'; var_dump(Foo::{$name});
آیا PHP مرده است؟
این سوال که شاید PHP به دوران مرگ خود نزدیک شده است ذهن خیلی از توسعهدهندگان وب را درگیر خود کرده است. مخصوصا با ظهور زبانهای جدید مثل Rust، Python، GoLang و … بسیاری از برنامهنویسان وب احساس خطر کردهاند و مشاهده شده که حداقل به مهاجرت به زبانهای دیگر فکر کردهاند. اما خبر خوب این است که PHP قطعا خیلی با مرگ فاصله دارد. مهم نیست که هر توسعه دهنده ناراضی ممکن است به شما بگوید دوران PHP به اتمام رسیده است. به هر حال، ۷۷ درصد از تمام وبسایتهای دنیا نمیتوانند اشتباه کنند، و مهمتر از همه، سهم بازار PHP در طول پنج سال گذشته نسبتاً ثابت باقی مانده است (بین ۷۸ تا ۸۰ درصد در نوسان است). تعداد کمی از زبان های برنامه نویسی به این نوع از قدرت ماندگار فرمان می دهند.
زبان برنامهنویسی | سهم بازار در سال ۲۰۲۳ |
PHP | ۷۶.۹% |
ASP.NET | ۶.۸% |
Ruby | ۵.۵% |
Java | ۴.۷% |
JavaScript | ۳.۰% |
Scala | ۲.۹% |
Static files | ۱.۸% |
Python | ۱.۴% |
ColdFusion | ۰.۳% |
Perl | ۰.۲% |
Erlang | ۰.۱% |
تاریخ انتشار
PHP 8.3 طبق لیست وظایف آماده سازی در ۲۳ نوامبر ۲۰۲۳ (به شمسی ۲ آذر ۱۴۰۲) منتشر خواهد شد. PHP 8.3 در سه نسخه آلفا، سه نسخه بتا و شش نسخه RC تست خواهد شد. در جدول زیر تاریخ دقیق جزییات انتشار را مشاده خواهید کرد:
Date | Release |
---|---|
June 8, 2023 | Alpha 1 |
June 22, 2023 | Alpha 2 |
July 6, 2023 | Alpha 3 |
July 18, 2023 | Feature freeze |
July 20, 2023 | Beta 1 |
August 03, 2023 | Beta 2 |
August 17, 2023 | Beta 3 |
August 31, 2023 | RC 1 |
September 14, 2023 | RC 2 |
September 28, 2023 | RC 3 |
October 12, 2023 | RC 4 |
October 26, 2023 | RC 5 |
November 9, 2023 | RC 6 |
November 23, 2023 | GA |