
انتظار می رود PHP 8.2 در ماه نوامبر سال جاری منتشر شود و آخرین نسخه پایدار آن PHP 8.1.5 است. در حالی که هنوز در مراحل اولیه است، استقبال متفاوتی در مورد PHP 8.2 و سازگاری هسته، افزونه و تم وردپرس وجود داشته است.
با این حال، دانستن آنچه باید انتظار داشته باشید می تواند به شما کمک کند برای آخرین نسخه PHP آماده شوید. با یادگیری ویژگیهای جدید و ویژگیهایی که منسوخ شدهاند، میتوانید درک کنید که یک بهروزرسانی چگونه بر توسعه تأثیر میگذارد. این دانش همچنین می تواند به شما کمک کند تا برای انتشار نهایی آماده شوید.
در این پست آخرین نسخه های PHP را خلاصه می کنیم. در مرحله بعد، به موارد جدید در PHP 8.2 نگاهی می اندازیم و برنامه زمان بندی انتشار را مورد بحث قرار می دهیم. بیایید بپریم!
مروری بر نسخه های PHP
PHP زبان اصلی برنامه نویسی وردپرس است. این نقش حیاتی در تبدیل داده ها از پایگاه داده شما به صفحات وب HTML برای بازدیدکنندگان سایت شما دارد.
به عنوان یک مالک یا توسعه دهنده وب سایت، احتمالاً از قبل با اهمیت به روز نگه داشتن هسته، تم ها و افزونه های وردپرس آشنا هستید. با این حال، به روز نگه داشتن PHP خود نیز بسیار مهم است.
وردپرس در حال حاضر استفاده از حداقل PHP 7.4 را توصیه می کند. نسخههای قدیمیتر PHP دیگر پشتیبانی فعالی برای بهروزرسانیهای امنیتی و رفع اشکال دریافت نمیکنند. از این رو به جدیدترین نسخه ارتقا دهید پایدار نسخه PHP می تواند منجر به امنیت بهتر سایت، عملکرد بهبود یافته و سطوح بالاتر پشتیبانی شود (ما تاکید می کنیم پایدار (از آنجایی که بخشی از افزونه های 60000+ وردپرس هنوز به طور کامل با PHP 8.0 سازگار نیستند، بنابراین ایده خوبی است که با احتیاط به این به روز رسانی ها نزدیک شوید).
PHP 7.4 ویژگی های تایپ، خط زیر، جداکننده عددی و پیشرفت های مختلف را معرفی کرد. از آن زمان تاکنون چندین نسخه دیگر از PHP منتشر شده است.
PHP 8.0 که در نوامبر 2020 منتشر شد، چندین ویژگی اصلی را به همراه داشت. علاوه بر بهبود نحو و عملکرد، این نسخه شامل موارد زیر است:
- پارامترهای نامگذاری شده
- مطابقت نحو
- انواع اتحادیه ها
- ارتقای اموال سازندگان
- JIT (که بر نحوه اجرای کد منبع PHP تأثیر می گذارد)
یک سال بعد، PHP 8.1، آخرین نسخه اصلی PHP آمد. این به روز رسانی شامل ویژگی های مهمی مانند:
- انواع تقاطع ها
- ویژگی های فقط خواندنی
- Enums
- الیاف
- نوع هرگز برنمی گردد
حفظ آخرین نسخه های PHP می تواند به افزایش عملکرد و امنیت وب سایت شما کمک کند. با این حال، مهم است که بدانید قبل از ارتقاء چه تغییراتی را باید انتظار داشت. اگر علاقه مند به آزمایش وضعیت فعلی PHP 8.2 هستید، می توانید این کار را از طریق GitHub انجام دهید.
موارد جدید در PHP 8.2
پیشبینی میشود PHP 8.2 تا پایان سال 2022 منتشر شود. در اینجا برنامه زمانبندی انتشار کنونی، با در دسترس بودن عمومی (GA) برای 24 نوامبر 2022 برنامهریزی شده است:
- 9 ژوئن: آلفا 1
- 23 ژوئن: آلفا 2
- 7 جولای: آلفا 3
- 19 ژوئیه: ثابت کردن ویژگی
- 21 ژوئیه: بتا 1
- 4 آگوست: بتا 2
- 18 آگوست: بتا 3
- 1 سپتامبر: شماره کاندید 1
- 15 سپتامبر: کاندید 2 را آزاد کنید
- 29 سپتامبر: نامزد 3 را آزاد کنید
- 13 اکتبر: نامزد 4 را آزاد کنید
- 27 اکتبر: نامزد 5 را آزاد کنید
- 10 نوامبر: نامزد 6 را آزاد کنید
- 24 نوامبر: GA
طبق اسناد رسمی وب سایت PHP، باید چندین ویژگی جدید و ویژگی های منسوخ وجود داشته باشد. بیایید نگاهی به برخی از آنها بیندازیم!
انواع فرم نرمال جداکننده (DNF).
PHP 8.2 یک ویژگی جدید برای انواع فرم های معمولی جداکننده (DNF) معرفی می کند. DNF یک روش استاندارد شده برای سازماندهی عبارات بولی است – به طور خاص، OR کردن یک سری از ANDها. وقتی DNF برای اعلانهای نوع اعمال میشود، یک روش استاندارد برای نوشتن انواع ترکیبی Union و Intersection که تجزیهکننده میتواند مدیریت کند، اجازه میدهد.
تابع جدید mysqli_execute_query و روش mysqli::execute_query
اجرای کوئری های MySQLi پارامتری شده در PHP 8.2 به لطف نسخه جدید آسان تر خواهد بود. mysqli_execute_query ($sql، $params) عملکرد و mysqli::execute_query روش.
این امر پیچیدگی استفاده از پرسوجوهای پارامتری را کاهش میدهد، که سپس دور شدن از برنامهنویسان را آسانتر میکند. mysqli_query() و همچنین مخفی کردن خطرناک/خطرناک ارزش های کاربر.
بازیابی خصوصیات enum در عبارات const
با توجه به RFC، “این RFC پیشنهاد می کند اجازه استفاده از ->/؟-> برای استخراج خواص شمارش در عبارات ثابت. انگیزه اصلی این تغییر، اجازه استخراج نام و ویژگی های مقدار در مکان هایی است که اشیاء enum مجاز نیستند، مانند کلیدهای آرایه.
پسوند تصادفی جدید
PHP 8.2 پسوند جدید PHP را معرفی می کند تصادفی. این کارکردهای موجود PHP مربوط به تولید اعداد تصادفی را سازماندهی و ادغام می کند. همچنین مجموعهای از کلاسهای ساختار PHP و کلاسهای استثنا را معرفی میکند تا گزینههای دقیقی برای مولدهای اعداد تصادفی و مدیریت استثنا ارائه دهد.
پسوند دلخواه با PHP همراه است و هیچ گزینه پیکربندی زمان کامپایل یا زمان اجرا برای غیرفعال کردن وجود ندارد تصادفی افزونه. را تصادفی برنامه افزودنی همیشه در PHP 8.2 و بالاتر در دسترس خواهد بود.
تابع جدید curl_upkeep
PHP 8.2 یک ویژگی جدید به افزونه Curl اضافه می کند که نام دارد curl_upkeep. تابع curl_upkeep فراخوانی می کند curl_easy_upkeep() در libcurl، که کتابخانه اصلی C است که از پسوند PHP Curl استفاده می کند.
را curl_upkeep() تابع کاری را انجام می دهد که اتصال Curl را زنده نگه می دارد. اما هر نوع اتصالی که Curl ادغام می کند از پشتیبانی اتصال پشتیبانی نمی کند. در حال حاضر فقط اتصالات HTTP/2 از آن پشتیبانی می کنند.
تابع جدید ini_parse_quantity
ini_parse_quantity ویژگی جدیدی است که در PHP 8.2 به PHP اضافه خواهد شد. هر اندازه داده ای را که توسط مقادیر PHP INI شناسایی می شود (مانند 56K، 256M یا 1G) تجزیه می کند، سپس اندازه داده را بر حسب بایت برمی گرداند. این می تواند هنگام تجزیه مقادیر INI موجود یا ارائه شده در یک برنامه PHP مفید باشد. با این حال، پسوندهای IEC را برای اندازه های داده مانند MB، MiB یا GB تشخیص نمی دهد و برای تبدیل مقادیر اندازه داده استاندارد به بایت مناسب نیست.
عملکرد جدید memory_reset_peak_usage
PHP 8.2 دارای ویژگی جدیدی به نام خواهد بود memory_reset_peak_usage. با این کار حداکثر استفاده از حافظه بازگشتی توسط بازنشانی می شود memory_get_peak_usage عملکرد.
این ویژگی برای مواردی مفید خواهد بود که شامل چندین بار فراخوانی یک عمل و ثبت حداکثر استفاده از حافظه در هر تکرار است. توسعه دهندگان می توانند از این ویژگی جدید برای بازنشانی حداکثر استفاده از حافظه در هر زمان معینی در طول عمر درخواست استفاده کنند.
محتوا را مستقیماً به صندوق ورودی خود تحویل دهید
در وبلاگ ما مشترک شوید و محتوای عالی را درست مانند این دریافت کنید که مستقیماً به صندوق ورودی شما تحویل داده می شود.
کلاس های فقط خواندنی
در PHP 8.1 معرفی شده است، ویژگی های فقط خواندنی در PHP 8.2 برای افزودن قند نحوی گسترش می یابد تا همه ویژگی های یک کلاس به طور همزمان فقط خواندنی شوند:
readonly class Post { public function __construct( public string $title, public Author $author, public string $body, public DateTime $publishedAt, ) {} }
این کار از اضافه شدن ویژگی های پویا به کلاس ها جلوگیری می کند.
انواع مستقل Null، True و False
در PHP 8.2، نوع بازگشت نادرست به عنوان یک نوع مستقل به جای یک نوع اتحادیه در صورت بروز خطا در دسترس خواهد بود، که اکنون امکان پذیر است:
function alwaysFalse(): false { return false; }
در مورد نوع null هم همینطور. به عنوان مثال، به عنوان یک نوع مستقل، بر خلاف قبل، NullPost::getAuthor() فقط می تواند null را برگرداند.
PHP 8.2 همچنین به عنوان یک نوع مستقل اجازه می دهد تا true.
نادیده گرفتن خواص پویا
ویژگیهای پویا در PHP 8.2 منسوخ میشوند و در نتیجه یک خطای Exception از PHP 9.0 ایجاد میشود. این ویژگی ها روی یک شی تنظیم می شوند:
class Post { public string $title; } // … $post->name="Name";
ویژگی های پویا امکان انعطاف پذیری را در ایجاد کلاس ها (مثلاً اشیاء ارزش) بدون اعلان کلاس سخت می دهد. رد کردن آنها احتمالاً برای توسعه دهندگانی که به ویژگی های پویا متکی هستند مشکل ساز است زیرا آنها را بیشتر به سمت تجزیه و تحلیل استاتیک سوق می دهد. به همین دلیل، برخی از توسعه دهندگان نگران این تغییر با PHP 8.2 هستند.
با این حال، کلاسهایی که از __get و __set استفاده میکنند، همچنان مانند اشیاء stdClass، از ویژگیهای پویا پشتیبانی میکنند.
همچنین، توسعه دهندگان می توانند از # جدید استفاده کنند[AllowDynamicProperties]ویژگی اعلام شده در فضای نام جهانی کلاس ها به این ویژگی ها:
#[AllowDynamicProperties] class User() {} $user = new User(); $user->foo = 'bar';
اگرچه توصیه نمی شود، اما گزینه دیگر غیرفعال کردن هشدارهای خروج است.
اصلاح کننده جدید /n
PHP 8.2 شامل پشتیبانی از اصلاح کننده /n (no-catch) به خانواده توابع preg_* می شود. در صورت استفاده، همه گروههای دارای متا کاراکتر () نمیگیرند، به جز گروههای گرفتار که نامگذاری شدهاند. در اصل، نتیجه همان علامت گذاری هر گروه به عنوان غیر اسیر است.
دلیل این تغییر این است که اصلاح کننده عبارات منظم پیچیده را برای چندین گروه ساده می کند. به جای تبلیغ هر گروه به عنوان غیر رهگیری، توسعه دهندگان می توانند همه گروه ها را به عنوان غیر رهگیری علامت گذاری کنند. سپس میتوانند گروههای خاصی را برای عکسبرداری انتخاب و نامگذاری کنند.
ویرایش پارامترها در بک ترک ها
بسیاری از توسعه دهندگان از خدماتی استفاده می کنند که ردیابی پشته و خطاهای تولید را از پایگاه های کد ردیابی می کنند. این سرویسها میتوانند در صورت بروز مشکل به کاربران اطلاع دهند. به عنوان مثال، ردیابی پشته های تماس هنگام اشکال زدایی یک برنامه مفید است.
با این حال، ردیابی پشته گاهی می تواند حاوی اطلاعات حساسی مانند نام کاربری و رمز عبور باشد. PHP 8.2 شامل # خواهد شد[SensitiveParameter] مشخصه ای که از گنجاندن این اطلاعات در ردیابی پشته در هنگام اشتباه جلوگیری می کند:
function test( $foo, #[SensitiveParameter] $bar, $baz ) { throw new Exception('Error'); } test('foo', 'bar', 'baz');
PHP 8.2 از پارامترهای حساس برای حذف اطلاعات خصوصی از ردیابی پشته استفاده می کند و آنها را ایمن تر می کند. این پارامترها تضمین می کنند که داده ها در لاگ های خطا قرار نمی گیرند. توجه داشته باشید که این ویژگی فقط برای استفاده از پارامتر در دسترس خواهد بود.
درون یابی رشته ای ${} را رد کنید
راه های زیادی برای جاسازی متغیرها در رشته ها با PHP وجود دارد. با این حال، PHP 8.2 دو روش را لغو می کند. اولین مورد از ${} در رشته ها استفاده می کند:
"Hello ${world}";
دومی از ${} (متغیرهای متغیر) استفاده می کند:
"Hello ${(world)}";
احتمالاً این مشکل بزرگی برای توسعه دهندگان نخواهد بود، زیرا دو روش محبوب درون یابی رشته ای همچنان کار خواهند کرد.
رد کردن تماس هایی که تا حدی پشتیبانی می شوند
یکی دیگر از تغییرات منسوخ شده مربوط به تماس هایی است که تا حدی پشتیبانی می شوند. راه های مختلفی برای ایجاد فراخوانی در PHP وجود دارد. می توان آن را با یا بدون پارامتر با دستور $callable()، user_call_func(/a_array)، یا با استفاده از یک تابع با یک callback فراخوانی کرد.
الگوهای تماس رد شده شامل موارد زیر است:
$callable = "self::method"; $callable = "parent::method"; $callable = "static::method"; $callable = ["self", "method"]; $callable = ["parent", "method"]; $callable = ["static", "method"]; $callable = ["MyClass", "MyParentClass::myMethod"]; $callable = [new MyClass(), "MyOtherClass::myMethod"];
با شروع با PHP 8.2، فراخوانی هر یک از موارد بالا منجر به اخطار منسوخ شدن زیر می شود:
class Test { public static function myMethod(): void { echo "Called"; }
public static function call(): void { $callable="self::myMethod"; call_user_func($callable); } }
$callable = Test::call(); // "Called";
با این حال، انتقال این تماس گیرندگان به قابل فراخوانی است تابع یا استفاده از آنها با انواع پارامترهای قابل فراخوانی، پیام انحلال تولید نمیکند. برای جلوگیری از اخطار منسوخ شدن، توسعهدهندگان میتوانند در عوض کلمات کلیدی والد، خود و استاتیک را در کد بازگشت به تماس با استفاده از متد magic::class به نام کلاس مربوطه تبدیل کنند.
بخشی از دلیل این تغییر این است که اجازه می دهد از callable ها برای خصوصیات تایپ شده استفاده شود. این باعث می شود آنها کمتر به زمینه وابسته شوند.
MySQLi دیگر با libmysql قابل کامپایل نیست
در گذشته، PHP از دو کتابخانه اتصال پایگاه داده MySQL پشتیبانی می کرد: mysqlnd و libmysql. از PHP 5.4، اولی کتابخانه پیش فرض است. با این حال، امکان کامپایل MySQLi از طریق افزونه ها وجود داشت.
با شروع با PHP 8.2، کامپایل پسوند MySQLi با libmysql پشتیبانی نخواهد شد. تلاش برای انجام این کار منجر به یک خطای پیکربندی می شود:
./configure --with-mysqli=FOO
پیوند mysqli با یک کتابخانه خارجی دیگر پشتیبانی نمی شود
این احتمالاً باعث ایجاد اشکالات قابل توجهی برای توسعه دهندگان نخواهد شد. با این حال، دو ویژگی بزرگ پشتیبانی شده توسط libmysql که با mysqlnd در دسترس نیستند، پشتیبانی از اتصال مجدد خودکار و احراز هویت از طریق LDAP و SASL است.
نسخه پی اچ پی وردپرس خود را به روز نگه دارید
به عنوان یک توسعه دهنده، مهم است که کد خود را در برابر نسخه های PHP آینده آزمایش کنید. در این صورت، توسعه دهندگان باید در اسرع وقت آزمایش کد خود را در برابر PHP 8.2 آغاز کنند تا مطمئن شوند که کد شما هنگام به روز رسانی سایت کاربران را خراب نمی کند.
محیط توسعه کامل
ما مطمئن میشویم که وبسایت شما سریع، ایمن و همیشه فعال باشد تا بازدیدکنندگان به شما اعتماد کنند. برنامه ها از 1.99 دلار در ماه شروع می شوند.