PHP 8.5 – چه چیزی در راه است
مقالات برنامه نویسیتغییرات مهمی که در php 8.5 وجود دارد شامل چه گزینههایی است ؟ احتمالا شما پس از ظهور نسخه 8.5 این مقاله را مطالعه کنید اما درهر صورت این امکانات را در نسخه 8.5 داریم ...

به عنوان توسعهدهندگان PHP، ما در طول سالهای گذشته شاهد تحولی شگفتانگیز بودهایم. از انقلاب عملکردی PHP 7 تا انواع union و attribute ها در PHP 8، هر نسخه ویژگیهایی را به همراه آورده که واقعاً زندگی روزمره کدنویسی ما را بهتر کردهاند. PHP 8.5 این روند را ادامه میدهد.
آن زمانها را به یاد آورید که در حال نوشتن کد هستید و فکر میکنید “حتماً باید راه بهتری برای انجام این کار وجود داشته باشد”؟ یا وقتی با یک خطای مهلک مواجه میشوید و زمان زیادی را صرف میکنید تا بفهمید کدام تابع واقعاً باعث ایجاد خطا شده است؟ PHP 8.5 بسیاری از این ناامیدیهای روزمره را با افزودنیهای متفکرانهای برطرف میکند.
پیشنهادی : دوره آموزش php
انتشار این نسخه نشان میدهد تیم PHP به دقت به جامعه گوش میدهد. برای مثال، عملگر pipe مدتهاست که یک ویژگی درخواست شده است که از زبانهای برنامهنویسی تابعی الهام گرفته شده. در همین حال، ردیابی پشته خطاهای مهلک، نقطه درد دیباگینگی را حل میکند که سالها توسعهدهندگان را ناامید کرده است.
در زیر موارد جدید که در php نسخه 8.5 اضافه شده است را بررسی می کنیم.
عملگر Pipe: زنجیرهسازی توابع تمیزتر
شاید چشمگیرترین امکانات جدید، عملگر pipe جدید (|>) باشد که به شما امکان میدهد فراخوانیهای تابع را به روشی خواناتر از چپ به راست زنجیره کنید. اگر قبلاً با زبانهایی مانند F# یا Elixir کار کردهاید، این برایتان آشنا به نظر میرسد، و اگر نکردهاید، در شرف یک لذت هستید.
به جای فراخوانیهای تابع عمیقاً تودرتو یا متغیرهای میانی متعدد، اکنون میتوانید بنویسید:
$message = "Welcome Back"
|> strtolower(...)
|> trim(...)
|> ucfirst(...);
// Result: "Welcome back"این بسیار خواناتر از روش تودرتوی سنتی است:
$message = ucfirst(trim(strtolower("Welcome Back")));عملگر pipe با هر callable – توابع، متدها، closureها و حتی کلاسها با __invoke کار میکند.
با این حال، عملگر pipe محدودیتهای مهمی دارد که باید در نظر داشته باشید:
- هر تابع در زنجیره باید فقط یک پارامتر اجباری بپذیرد (مقدار pipe شده به عنوان اولین آرگومان میشود)
- توابع با پارامترهای ارجاعی پشتیبانی نمیشوند (زیرا هیچ متغیر واقعی برای ارجاع وجود ندارد)
اما کمی بیشتر از نسخه 8.5 توقع داریم …
دیباگ خطاهای بهتر با ردیابی پشته
PHP 8.5 در نهایت ردیابی پشته را به خطاها اضافه میکند که دیباگ و خطایابی را بسیار آسانتر میکند. قبلاً، وقتی اسکریپت شما به یک خطا مانند اتمام حافظه برخورد میکرد، فقط پیام خطا و شماره خط را میدیدید. اکنون شما پشته فراخوانی کامل را دریافت میکنید.
Fatal error: Allowed memory size exhausted in script.php on line 8
Stack trace:
#0 script.php(12): process_large_data()
#1 script.php(20): handle_request()
#2 {main}این ویژگی توسط دستور INI جدید fatal_error_backtraces کنترل میشود و به طور پیشفرض فعال است.
توابع راحتی جدید آرایه
دو تابع ساده اما مفید به جعبه ابزار آرایه PHP میپیوندند و شکافی را پر میکنند که بسیاری از توسعهدهندگان سالها با آن کار کردهاند. در حالی که PHP 7.3 به ما array_key_first() و array_key_last() داد تا کلیدها را بگیریم، گرفتن مقادیر واقعی نیاز به مراحل اضافی داشت.
$fruits = ['apple', 'banana', 'cherry'];
$first = array_first($fruits); // 'apple'
$last = array_last($fruits); // 'cherry'
// Works with associative arrays too
$scores = ['alice' => 95, 'bob' => 87, 'charlie' => 92];
$first_score = array_first($scores); // 95
$last_score = array_last($scores); // 92قبل از PHP 8.5، گرفتن اولین مقدار از یک آرایه اغلب به معنای نوشتن reset($array) یا array_values($array)[0] بود، که هر دو ناشیانه به نظر میرسند و برای سایر توسعهدهندگانای که کد شما را میخوانند بلافاصله واضح نیستند. توابع جدید هدف را کاملاً واضح میکنند.
یک نکته مهم: هر دو تابع برای آرایههای خالی null برمیگردانند، اما از آنجایی که null میتواند یک مقدار آرایه معتبر نیز باشد، ممکن است در برخی موارد به بررسیهای اضافی نیاز داشته باشید:
$data = [null, 'second', 'third'];
$first = array_first($data); // null (valid value)
$empty = [];
$first = array_first($empty); // null (empty array)
// If you need to distinguish between these cases
if (empty($data)) {
// Array is actually empty
} elseif (array_first($data) === null) {
// First value is null
}اینها مکمل توابع موجود array_key_first() و array_key_last() از PHP 7.3 هستند و به شما دسترسی کامل به هر دو انتهای آرایههایتان بدون هیچ ورزش ذهنی میدهند.
توابع درونبینی Handler
PHP 8.5 توابع get_error_handler() و get_exception_handler() را معرفی میکند تا handlerهای خطا و استثنای تنظیم شده فعلی را بازیابی کنند. این شکافی را پر میکند که در آن شما میتوانستید handlerها را تنظیم و بازیابی کنید اما به راحتی نمیتوانستید بررسی کنید که در حال حاضر چه چیزی فعال است:
set_error_handler('my_error_handler');
$current_handler = get_error_handler(); // Returns 'my_error_handler'
if (get_exception_handler() === null) {
// No exception handler is currently set
set_exception_handler('my_exception_handler');
}ویژگیهای بینالمللیسازی
افزونه Intl چندین بهبود دریافت میکند. یک تابع جدید locale_is_right_to_left() (و متد متناظر Locale::isRightToLeft()) به تعیین اینکه آیا یک locale از اسکریپتهای راست به چپ استفاده میکند کمک میکند:
locale_is_right_to_left('en-US'); // false
locale_is_right_to_left('ar-SA'); // true
locale_is_right_to_left('he-IL'); // trueهمچنین یک کلاس جدید IntlListFormatter برای ایجاد فهرستهای آگاه از locale وجود دارد:
$formatter = new IntlListFormatter('en-US');
echo $formatter->format(['Paris', 'London', 'Tokyo']);
// "Paris, London, and Tokyo"
$formatter = new IntlListFormatter('de-DE');
echo $formatter->format(['Paris', 'London', 'Tokyo']);
// "Paris, London und Tokyo"بهبود cURL
برای کسانی که با cURL multi-handle کار میکنند، تابع جدید curl_multi_get_handles() تمام handleهای مرتبط با یک multi-handle را برمیگرداند و نیاز به ردیابی دستی آنها را از بین میبرد:
$multi = curl_multi_init();
$handle1 = curl_init('https://api.example.com/users');
$handle2 = curl_init('https://api.example.com/posts');
curl_multi_add_handle($multi, $handle1);
curl_multi_add_handle($multi, $handle2);
$all_handles = curl_multi_get_handles($multi);
// Returns [$handle1, $handle2]
اما در ادامه …
چشمانداز آینده
PHP 8.5 تکامل زبان را به سمت نحو بیانیتر و توسعهدهندهپسندتر ادامه میدهد در حالی که سازگاری عقبگرد را حفظ میکند. عملگر pipe، به ویژه، گام قابل توجهی به سمت الگوهای برنامهنویسی تابعی نشان میدهد که بسیاری از توسعهدهندگان درخواست کردهاند.
بیشتر بخوانید : کاربرد آرایه ها در php چیست؟
این ویژگیها در مجموع کد PHP را خواناتر، دیباگ را آموزندهتر و توسعه بینالمللی را در دسترستر میکنند. در حالی که هیچکدام به طور جداگانه انقلابی نیستند، اما با هم نشاندهنده بهبودهای معنادار کیفیت زندگی برای توسعهدهندگان PHP در سراسر جهان هستند.
من شخصاً نمیتوانم منتظر بمانم تا زمانی که PHP 8.5 منتشر شد، این ویژگیها را امتحان کنم! تا آن زمان، به ساختن نرمافزارهای عالی ادامه دهید!








