اگر شما یک توسعه دهنده هستید یا ترند های توسعه وب را دنبال می کنید، احتمالاً می دانید که در اواخر سال گذشته یک به روزرسانی جدید و عمده برای PHP منتشر شد. شاید از خود بپرسید که آیا بهتر است وب سایت خود را به این نسخه جدید (PHP 8) ارتقا دهید؟
PHP 8 ویژگی ها و تغییرات جدید و همچنین نوید پیشرفت های چشمگیر را به ارمغان می آورد. با این حال به روزرسانی های عمده نسخه ها گاهی اوقات مشکلات سازگاری با هسته وردپرس و افزونه های وردپرس را معرفی می کنند، بنابراین پاسخ لزوماً واضح نیست. در این مقاله بزرگ ترین ویژگی ها و تغییرات در PHP 8 را کشف خواهیم کرد و در مورد زمان ارتقا آن صحبت می کنیم.
PHP 8 آخرین نسخه از زبان محبوب اسکریپت نویسی، در اواخر نوامبر 2020 منتشر شد. اگر با این زبان آشنایی ندارید، زبان برنامه نویسی PHP یکی از اصلی ترین زبان های برنامه نویسی است که هم در پلتفرم هایی مانند WordPress و هم در بیشتر وب استفاده می شود. در واقع بیشتر قسمت های اصلی وردپرس با PHP نوشته شده اند و این زبان یکی از زبان هایی است که باید برای فهم وردپرس آن را بدانیم.
PHP 8 در مقایسه با نسخه قبلی (7.4) تعداد زیادی تغییر در زبان ایجاد می کند. همچنین توابع و ویژگی های جدیدی مانند کامپایلر Just-In-Time (JIT) و همچنین به روزرسانی ویژگی ها و مدیریت خطا وجود دارد.
البته مانند هر به روزرسانی عمده PHP این مورد نیز ممکن است شامل “شکستن تغییرات” باشد، به روزرسانی کدی که با نرم افزاری که با استفاده از نسخه های قدیمی PHP ساخته شده سازگار نیست. PHP 7 از این نظر تفاوتی نداشت. به همین دلیل احتیاط کردن و انجام بسیاری از تحقیقات و آزمایشات قبل از به روزرسانی هوشمندانه است.
همانند هر نسخه مهم PHP 8 شامل مجموعه ای از ویژگی های جدید و به روز شده و همچنین برخی از رفع اشکالات و تغییرات پشت صحنه است. در اینجا ما برخی از جالب ترین به روز رسانی ها را شرح خواهیم داد.
شاید بیشترین و پیش بینی شده ترین تغییر در PHP 8 در حوزه عملکرد، خصوصاً در قالب کامپایلر Just-In-Time (JIT) باشد. به زبان عامیانه یک کامپایلر کد منبع را دریافت می کند (در PHP) و آن را به چیزی قابل خواندن توسط رایانه های مجری کد تبدیل می کند.
تفاوت کامپایلر JIT این است که این کار را فقط در صورت لزوم، در “زمان اجرا” انجام می دهد نه قبل از آن. هدف کارآیی بیشتر و ارائه عملکرد سریع تر است و به نظر می رسد کامپایلر JIT در PHP 8 این وعده را عملی کرده است.
متأسفانه بهبود سرعت و کارایی PHP به طور کلی از کامپایلر JIT ممکن است مستقیماً به افزایش چشمگیر عملکرد وردپرس تبدیل نشود. اگرچه ممکن است سرعت پایینی را مشاهده کنید، وردپرس به عملکرد های بیشتر از PHP بستگی دارد: عناصری مانند JavaScript نیز در بازی هستند که از این تغییرات بهره نخواهند برد.
هنوز هم این یک گام در مسیر درست است و در نهایت راه را برای تغییرات آینده برای افزایش عملکرد وردپرس هموار می کند. همچنین این امر مزیت بزرگی برای توسعه دهندگان است که با کد PHP در زمینه های دیگر کار می کنند.
بهبود عملکرد تنها چیزی نیست که در مورد PHP 8 هیجان انگیز است. همچنین چندین تابع کاملا جدید وجود دارد که جستجو را آسان و راحت می کند:
str_contains یک تابع جدید است که به منظور ساده سازی جستجو needle در داخل یک رشته کد داده شده، ساده تر و کمتر مستعد خطا است. در نسخه های قبلی PHP توابع strstr و strpos مورد استفاده برای این کار بودند، اما به بلوک های کد پیچیده تری احتیاج دارند و دارای برخی مشکلات هستند. تابع جدید به این شکل است:
str_contains ( string $haystack , string $needle ) : bool
()str_starts_with و ()str_ends_with نیز توابع جدیدی هستند که برای ساده سازی جستجو در رشته ها طراحی شده اند. با این حال این موارد خاص ترند: آن ها به راحتی می بینند که آیا رشته با اصطلاح داده شده شروع می شود یا به پایان می رسد یا خیر، سپس یک پاسخ درست / غلط را برمی گرداند. این یک عملکرد معمولاً مورد نیاز در PHP است، بنابراین گنجاندن آن مورد استقبال قرار می گیرد.
در آخر get_debug_type تابعی است که نوع متغیر مشخص شده را برمی گرداند. PHP قبلاً عملکرد مشابهی به شکل gettype دارد، اما گزینه جدید بیشتر برای توسعه دهندگان مفید است و می تواند نام کلاس ها را نیز حل کند.
PHP 8 اکنون به جای اینکه از پارامتر های وابسته به موقعیت استفاده کند، از پارامتر های Named پشتیبانی می کند. اساساً پارامتر های وابسته به موقعیت به کد شما نیاز دارند تا پارامتر ها را به همان ترتیب عملکردی که شما فراخوانی می کنید، قرار دهد.
از طرف دیگر پارامتر های نامگذاری شده (Named) می توانند به هر ترتیب قرار بگیرند، زیرا کد نام آن ها را تشخیص می دهد و نه فقط موقعیت آن ها. برای استفاده از تابع str_contains به عنوان مثال پارامتر های وابسته به موقعیت به این شکل هستند:
function str_contains(string $haystack, string needle): bool {}
str_contains('FooBar', 'Foo');
در حالی که پارامتر های نامگذاری شده به این شکل هستند:
function str_contains(string $haystack, string $needle): bool {}
str_contains(haystack: 'FooBar', needle: 'Foo');
معنای آن در عمل این است که با پارامتر های نامگذاری شده، هر دو قطعه کد صحیح بوده و نتیجه یکسانی را برمی گردانند:
str_contains(haystack: 'FooBar', needle: 'Foo');
str_contains(needle: 'Foo', haystack: 'FooBar');
برای توسعه دهندگان باتجربه این قابلیت افزایش خوانایی را با عملکرد های خاص فراهم می کند، در حالی که کسانی که تازه به یادگیری این زبان راه یافته اند، اگر ترتیب عملکرد های یک تابع خاص را فراموش کنند، کمی بیشتر مورد بخشش قرار می گیرند.
سرانجام اگر از پارامتر های نامگذاری شده به صراحت در کد فراخوانی نشده باشد، از مقادیر پیش فرض استفاده می کنند. این بدان معناست که می توانید از پارامتر های اختیاری که نیازی به انحراف از پیش فرض ندارند، صرف نظر کنید. این امر با پارامتر های وابسته به موقعیت امکان پذیر نیست.
PHP 8 ویژگی های v2 را معرفی می کند. این سیستم ویژگی ها را در PHP گسترش داده و بهبود می بخشد و قول می دهد که آن را با زبان های دیگر مطابقت دهد. ویژگی ها نوعی “metadata ساختار یافته” برای کلاس ها، خصوصیات، توابع و موارد دیگر است.
آن ها توسعه دهندگان را قادر می سازند دستورالعمل های پیکربندی را مستقیماً در کد تعریف کنند. در نسخه های قبلی PHP، ویژگی ها به صورت “doc-comments” ارائه می شوند که رشته های ساده ای هستند که فاقد ساختار هستند و به طور خودکار تجزیه نمی شوند.
ویژگی ها قبل از ساختاری که به آن تعلق دارند اضافه می شوند، اما می توانند قبل یا بعد از doc-comment که آن ها را مستند می کند، اعلام شوند. این مثال را از ویکی PHP مشاهده کنید:
<<ExampleAttribute>>
class Foo
{
<<ExampleAttribute>>
public const FOO = 'foo';
<<ExampleAttribute>>
public $x;
<<ExampleAttribute>>
public function foo(<<ExampleAttribute>> $bar) { }
}
$object = new <<ExampleAttribute>> class () { };
<<ExampleAttribute>>
function f1() { }
$f2 = <<ExampleAttribute>> function () { };
$f3 = <<ExampleAttribute>> fn () => 1;
این ویژگی های جدید به ساده سازی فرایندی کمک می کند که قبلاً توسط توسعه دهندگان PHP به روشی پیچیده تر استفاده شده است و همچنین باید به ویژگی های استاندارد در بین توسعه دهندگان کمک کند.
تغییر بزرگ دیگر در جدید ترین نسخه PHP در حوزه مدیریت خطا است. در PHP 8 توابع داخلی اکنون خطا های ‘type’ را تحت تأثیر قرار می دهند. این یک پیشرفت عمده است که متأسفانه با کد قدیمی سازگار نیست. با این حال در آینده خطا های debugging بسیار ساده تر خواهد شد.
در نسخه های قدیمی PHP هنگامی که مقداری را پیدا کرد که نمی تواند آن را استفاده کند، به سادگی مقدار null را بر می گرداند:
var_dump(strlen(new stdClass));
// Warning: strlen() expects parameter 1 to be string, object given
// NULL
این کار به هیچ وجه مفید نیست و بد تر از آن در توابع سازگار نیست. PHP 8 با ارائه تصویر واضح تری به توسعه دهندگان کمک می کند تا این خطا ها را عیب یابی کرده و کار ها را به جریان بیاندازند. قالب استاندارد جدید به شرح زیر است:
declare(strict_types=1);
var_dump(strlen(new stdClass));
// TypeError: strlen() expects parameter 1 to be string, object given
این رفتار استاندارد باید مزیت بزرگی برای توسعه دهندگان باشد.
در نسخه های قبلی PHP وقتی آرایه ای با یک شاخص منفی شروع می شود، شاخص های زیر با 0 شروع می شوند. این کد را در نظر بگیرید:
$a = array_fill(-5, 4, true);
var_dump($a);
در نسخه های قدیمی PHP این خروجی زیر را می دهد:
array(4) {
[-5]=>
bool(true)
[0]=>
bool(true)
[1]=>
bool(true)
[2]=>
bool(true)
}
همانطور که می بینید، اعداد بلافاصله از -5 به 0 می پرند و از همه چیز در این میان رد می شوند، که خیلی هم مفید نیست. البته اگر می دانید این رفتار مورد انتظار است، پس می توانید برای آن آماده شوید. اگر تازه با این زبان آشنا شدید یا با این قابلیت آشنایی ندارید، می تواند برای شما بسیار گیج کننده باشد.
در PHP 8 این بخش تغییر می کند. اکنون ایندکس بعدی بدون توجه به مثبت یا منفی بودن آن، یک ایندکس بیشتر از ایندکس شروع خواهد بود. در اینجا خروجی همان کد در PHP 8 آمده است:
array(4) {
[-5]=>
bool(true)
[-4]=>
bool(true)
[-3]=>
bool(true)
[-2]=>
bool(true)
}
لازم به ذکر است که این تغییر با گذشته سازگار نیست. بنابراین کدی که به نسخه های قبلی PHP متکی است یا از آن انتظار می رود، برای مدیریت فهرست جدید باید به روز شود.
PHP 8 کلاس جدیدی را معرفی می کند: WeakMap. این کلاس پشتیبانی موجود را برای منابع ضعیف (که در PHP 7.4 اضافه شده است) مورد استفاده قرار می دهد و آن را به شکل بسیار مفید تری گسترش می دهد.
طبق ویکی PHP، قابلیت WeakMap “ایجاد نقشه از اشیا به مقادیر دلخواه (مشابه SplObjectStorage) بدون جلوگیری از جمع آوری زباله هایی که به عنوان کلید استفاده می شوند” را در بر دارد. در صورت جمع آوری زباله های یک کلید شی، از نقشه حذف می شود.طبق PHP Wiki ، نقشه های ضعیف “ایجاد نقشه از اشیا to به مقادیر دلخواه (مشابه SplObjectStorage) بدون جلوگیری از جمع آوری زباله هایی که به عنوان کلید استفاده می شوند”. در صورت جمع آوری زباله های کلید یک شی، از نقشه حذف می شود.
اگرچه پشتیبانی از رفرنس های ضعیف در PHP 7.4 اضافه شده است، اما از آنجا که رفرنس های ضعیف به خودی خود معمولاً رایج نیستند، از کاربرد کمتری برخوردارند. تقریباً همیشه در متن یک WeakMap ظاهر می شوند.
علاوه بر این نحوه پیاده سازی رفرنس های ضعیف در PHP 7.4، افزودن یک ویژگی نقشه ضعیف را غیر ممکن کرده است. به همین دلیل کل ویژگی برای PHP 8 حذف و بازنویسی شد و نتیجه باید برای توسعه دهندگان بسیار مفید تر باشد.
PHP از آنچه به عنوان رشته های عددی شناخته می شود استفاده می کند، آ ها رشته هایی هستند که می تواند به عنوان اعداد توسط زبان تفسیر شود. در نسخه های گذشته PHP سه دسته برای رشته ها وجود داشت که حاوی اعداد بود:
دو دسته اول رشته های عددی به حساب می آیند، اما بسته به اینکه کدام عمل انجام می شود با آن ها متفاوت رفتار می شود. این کاملاً شهودی نیست مگر اینکه از این تفاوت ها آگاه باشید، ممکن است نتایج غیر منتظره ای کسب کنید.
در PHP 8 این دسته ها در یک مفهوم واحد متحد شده اند. طبق مستندات رسمی: “کاراکتر های عددی فقط با فضای سفید پیشرو و انتهایی مجاز هستند. هر نوع رشته دیگری عددی نیست و در صورت استفاده از عدد، TypeErrors را نشان می دهد. “
این منجر به یک سیستم بسیار ساده تر در پشت صحنه می شود. همچنین به شفاف سازی نتایج مورد انتظار برای توسعه دهندگان کمک می کند، بنابراین در کل این یک تغییر خوشایند است.
از آنجا که وردپرس (و پلاگین های آن) به شدت به PHP بستگی دارند، در صورت عدم بروزرسانی نرم افزار دیگر، نسخه های جدید این زبان می تواند منجر به مشکلات سازگاری شود. این به ویژه برای نسخه های اصلی، مانند PHP 8 صدق می کند.
به طور معمول وردپرس نسخه های جدید خود را همزمان با این به روزرسانی های اصلی PHP منتشر می کند تا به شما کمک کند از انتقال روان آن اطمینان حاصل کنید. آخرین نسخه وردپرس 5.6 برای تحقق این نقش طراحی شده است. با این حال وردپرس اعلام کرده است که نسخه 5.6 را باید فقط سازگار با بتا بدانید.
منظور این است که وردپرس 5.6 باید با PHP 8 سازگار باشد و توسعه دهندگان آزمایشات نسبتاً گسترده ای را در این قسمت انجام داده اند. با این حال هنوز خطر مشکلات کشف نشده با هسته وردپرس وجود دارد، بنابراین هنوز توسعه دهندگان نمی توانند تضمین کنند که همه چیز به طور کامل کار خواهد کرد.
علاوه بر این به روزرسانی فقط در هسته وردپرس اعمال می شود. افزونه ها وقالب ها توسط توسعه دهندگان شخص ثالث باید به طور جداگانه به روز شوند، این روند ممکن است مدتی طول بکشد.
این برای شما چه معنی دارد؟ ابتدا اگر می خواهید به روزرسانی کنید، باید دوباره بررسی کنید که قالب و افزونه هایی که استفاده می کنید توسط سازندگان آن ها دارای گواهی سازگاری هستند.
همچنین بهتر است قبل از اجرای به روزرسانی های مهم را در سرور آزمایشی در محیط زنده خود انجام دهید. PHP 8 هم هیچ تفاوتی ندارد باید کاملاً آزمایش شود. آزمایش می تواند در یک محیط مرحله بندی ایجاد شده از طریق حساب هاست شما انجام شود یا می توانید با استفاده از ابزار هایی مانند XAMPP ، MAMP و Local یک نسخه محلی از سایت خود ایجاد کنید. هر یک از این راه حل ها شما را قادر می سازد تا کپی از سایت خود را مستقیماً در رایانه خود ایجاد کنید.
با این کار می توانید هرگونه آزمایش و تغییر پیکربندی را بدون تأثیر مستقیم بر سایت زنده خود انجام دهید. اکثر ابزار ها شما را قادر می سازند تا آنجا که دوست دارید نصب محلی ایجاد کنید، بنابراین این یک روش خارق العاده برای آزمایش چیز های جدید است.
نسخه قبلی PHP 7.4 تا 28 نوامبر 2021 همچنان پشتیبانی فعال دارد و پس از آن یک سال دیگر به روزرسانی های امنیتی را دریافت می کند. این بدان معناست که شما تا پایان سال 2022 نیازی به به روزرسانی ندارید. وقت خود را صرف تست کنید و فقط درصورتی که مطمئن شوید سایت شما با نسخه جدید به راحتی کار می کند، به روزرسانی کنید.
PHP 8 پیشرفت های چشمگیری در عملکرد و ویژگی های جدید در زبان محبوب اسکریپت نویسی ایجاد کرده است. به طور خاص کامپایلر جدید JIT باعث هیجان زیادی شده است. با این حال به یاد داشته باشید که آخرین نسخه وردپرس 5.6 فقط با نسخه بتا سازگار با PHP 8 است.
اگر سایت شما بخشی مهم از یک کسب و کار است، نگه داشتن آن ایده خوبی است. در همین حال می توانید آن را در یک سایت آزمایشی امتحان کنید تا درباره آنچه ارائه می دهد بیشتر بدانید.
منبع: a2hosting.com
نمایش دیدگاهها
مرسی که منبع رو گذاشتید چون ترجمتون واقعا بد بود!