معرفی ویژگی های آخرین ورژن PHP - تازه های PHP 8 — از صفر تا صد

معرفی ویژگی های آخرین ورژن PHP - تازه های PHP 8 — از صفر تا صد
آکادمی آی تی
آکادمی آی تی
dots

معرفی ویژگی های آخرین ورژن PHP - تازه های PHP 8 — از صفر تا صد

زمان مورد نیاز برای مطالعه 5 دقیقه

php 8.0 نسخه نسبتا جدید انتشار یافته از PHP است که به آن ویژگی های جدیدی اضافه شده است. در این مقاله قصد داریم به توضیح این ویژگی ها می پردازیم.

دپارتمان ‌ها: آموزش برنامه نویسی
1399/04/31
9,525 بازدید

php 8.0  نسخه جدید انتشار یافته PHP  است که در آن با ویژگی‌ ها و بروزرسانی ‌های جدیدی رو به رو هستیم که در این مقاله قصد بررسی آن ها را داریم. با توجه به ویژگی های موجود برای PHP 7.4 و توسعه و پیشرفتی که نسبت به نسل های پیشین خود داشت، انتظار کاربران از PHP 8 بالاست.

از مهم ‌ترین ویژگی ‌هایی که برای PHP8.0 ارائه شده است می توان به real-time اشاره کرد. این گزینه امکان انجام یک پروژه بدون نیاز به زبان های مختلف برنامه نویسی را ایجاد می کند.

تغییرات و ویژگی ‌های جدید بسیاری که به PHP 8 اضافه شده، تا حد بسیار مطلوبی ایرادات و نواقص نسخه های قبلی را بر طرف کرده است. همچنین عملکرد این نسخه نسبت به نسل های قبلی بهبود قابل توجهی دارد. از قابلیت های جدید PHP 8 می توان به توابع جدید و کاربردی که به این نسخه اضافه شده است، اشاره کرد.

 

8 تغییر که باید در مورد PHP 8 بدانید

زبان برنامه نویسی PHP یکی از اصلی ترین زبان های برنامه نویسی است که هم در پلتفرم هایی مانند WordPress و هم در بستر وب استفاده می شود. تعداد زیادی تغییر در زبان PHP 8 نسبت به نسخه پیشین خود یعنی PHP 7.4 رخ داده است.

همچنین توابه زیادی به این نسخه اضافه شده. در ادامه تمام تغییرات پیش آمده در PHP 8 را بررسی می کنیم.

 

1.    بهبود قابل توجه عملکرد

از تغییرات پی آمده در PHP 8  که نسبت به سایر تغییرات بیشترین و پیش بینی شده ترین تغییر بوده، تغییر در حوزه عملکرد، خصوصاً در قالب کامپایلر Just-In-Time (JIT) است. به بیانی راحت تر یک کامپایلر کد منبع را دریافت می کند (در PHP) و آن را به چیزی قابل خواندن توسط رایانه های مجری کد تبدیل می کند.

حال تفاوت میان کامپایلر JIT با سایر کامپایلرها در این است که این کار را فقط در صورت لزوم و در زمان اجرا انجام می دهد. هدف این است که کارآیی بیشتر و ارائه عملکرد سریع تر باشد. اینطور به نظر می آید که کامپایلر JIT در PHP 8 این وعده را عملی کرده است.  البته بهبود سرعت و کارایی PHP به طور کلی از کامپایلر JIT ممکن است مستقیماً به افزایش چشمگیر عملکرد وردپرس تبدیل نشود.

با اینکه ممکن است سرعت پایینی که در ورپرس مشاهده می کنید به عملکرد های PHP بستگی داشته باشد ولی عناصری مانند JavaScript نیز در بازی هستند که از تغییرات به وجود آمده در پی اچ پی بهره نخواهند برد در حالی که بر روی سرعت و عملکرد وردپرس تأثیر گذار هستند.

 

قابلیت Just In Time (JIT) در PHP 8.0

JIT به ‌جای اینکه کدها را ابتدا کامپایل و سپس اجرا کند، کدها را در لحظه اجرا (runtime) پردازش کرده و به زبان قابل‌ فهم برای ماشین تبدیل می کند. یعنی این کامپایلر با پردازش Real Time نیاز به استفاده از مترجم را برطرف کرده است. همین امر باعث بهبود سرعت پردازش و افزایش داده و بهبود عملکرد می ‌شود. کامپایلر JIT برخلاف یک کامپایلر معمولی، می ‌تواند به اطلاعات داینامیک در حین اجرا (runtime) دسترسی داشته باشد.

 

مقدمه مختصری از JIT (Just-in-Time Compilation)

کامپایلر JIT که مخفف کلمات Just In Time است، به افزایش و بهبود کارایی کمک می ‌کند. این کامپایلر به صورت مستقیم بر سرعت پروژه‌ های PHP تأثیر ندارد. یعنی در درخواست ‌هایی که در پروژه ارسال و دریافت می ‌شود، بی تأثیر است. با این حال کامپایلر JIT همچنان  جنجالی ‌ترین به ‌روز رسانی PHP 8 است. 

 

چرا JIT در PHP معرفی شده است؟

ماشین مجازی و موتور اجرایی کدهای PHP نیز از JIT استفاده می کند. بنابراین در مقایسه با PHP engine اصلی که در PHP 7.0 ارائه شده بود، PHP 8 سریع ‌تر و بهتر است. آپدیت در engine عملکرد در لایه‌ های مختلف را بهبود و توسعه می دهد. استاندارد HHVM، سطح عملکرد را به راحتی دو برابر خواهد کرد.

می ‌توان کدی که در php 7.0 نوشته شده است را درنسخه PHP 8.0 نیز اجرا کرد که باعث نصف شدن زمان اجرا می ‌شود. JIT یکی از بهترین راه ‌ها برای انجام کامپایل در طی اجرای برنامه یا runtime ، است و هیچ گونه سؤالی در مورد کامپایل قبل از اجرا وجود ندارد. 

پیاده‌سازی‌ های فریم ورک .NET و JAVA نیز وابسته به JIT هستند و برای PHP نیز مشکلی وجود ندارد تا از کامپایل داینامیک بهره ببرد تا عملکرد خود را به سطوح بالاتر افزایش دهد. با استفاده از JIT پی اچ پی کم ‌تر مستعد overflow و مشکلات مربوط به مدیریت حافظه می شود و به طور کل مشکلاتی که مربوط به برنامه نویسی تحت زبان C می ‌باشد از بین خواهد رفت.   

 

2.    توابع جدید PHP

توابع کاملاً جدیدی وجود دارند که به PHP 8 اضافه شده اند که جستجو را آسان تر می کنند. 

 

•    str_contains

این تابع به منظور ساده سازی جستجو needle در داخل یک رشته کد ایجاد شده که ساده تر و کمتر مستعد خطا است. در نسخه های پیشتر PHP توابع strstr و strpos مورد استفاده برای این کار بودند، اما به بلوک های کد پیچیده تری احتیاج داشته و دارای برخی مشکلات بودند. تابع جدید str_contains به صورت زیر است:

str_contains ( string $haystack , string $needle ) : bool

 

•    ()str_starts_with () and str_ends_with 

()str_starts_with   و ()str_ends_with  هم از دیگر توابع جدیدی هستند که برای ساده سازی جستجو در رشته ها طراحی شده اند. آن ها به راحتی می بینند که آیا رشته با اصطلاح داده شده شروع شده یا به پایان می رسد، سپس یک پاسخ درست / غلط را برمی گردانند. این یک عملکرد معمولاً در PHP مورد نیاز است، بنابراین اضافه کردن آن مورد استقبال قرار می گیرد. 

 

•    get_debug_type

یکی دیگر از توابع جدید ایجاد شده get_debug_type است که نوع متغیر مشخص شده را بر می گرداند. PHP قبلاً عملکرد مشابهی به شکل gettype داشت، اما گزینه جدید بیشتر برای توسعه دهندگان مفید است و می تواند نام کلاس ها را نیز حل کند.

 

3.    معرفی پارامتر های نامگذاری شده

PHP 8 اکنون پشتیبانی از پارامترهای Named را جایگزین پارامترهای وابسته به موقعیت کرده است. پارامترهای وابسته به موقعیت به کد شما نیاز دارند تا پارامتر ها را به همان ترتیب عملکردی که شما فراخوانی می کنید، قرار دهد. این در حالی است که پارامترهای نامگذاری شده ( 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 ' ) ;

این قابلیت برای برنامه نویس ها و توسعه دهندگانی که باتجربه هستند، عملکردهای خاصی را فراهم می کند. همچنین برای افرادی که به تازگی زبان برنامه نویسی را فراگرفته اند، این عملکرد منعطف بوده و در صورت فراموشی یک تابع می توان از مشابه آن استفاده کرد.

زیرا اگر پارامترهای نامگذاری شده به صراحت در کد فراخوانی نشوند، از مقادیر پیش فرض استفاده می کنند. یعنی می توانید از پارامترهای اختیاری که نیازی به انحراف از پیش فرض ندارند، صرف نظر کنید. این امر با پارامترهای وابسته به موقعیت امکان پذیر نخواهد بود.

 

4.    ویژگی های v2

یکی از ویژگی هایی که توسط PHP 8 معرفی شده است، v2 می باشد. این سیستم ویژگی ها را در PHP گسترش داده و بهبود می بخشد. ویژگی های v2 نوعی metadata ساختار یافته برای کلاس ها، خصوصیات، توابع و موارد دیگر است.  

این ویژگی ها توسعه دهندگان را قادر می سازند تا دستورالعمل های پیکربندی را مستقیماً در کد تعریف کنند. در نسخه های قبلی PHP، ویژگی ها به صورت doc-comments ارائه شده بودند که رشته های ساده ای هستند. این رشته های ساده فاقد ساختار بودند و به طور خودکار تجزیه نمی شدند.

اما ویژگی های v2 می توانند قبل یا بعد از doc-comment که آن ها را مستند می کند، اعلام شوند. 

ویژگی های جدید v2 به ساده سازی فرایندی کمک می کند که قبلاً توسط توسعه دهندگان PHP به روشی پیچیده تر استفاده شده است. در زیر مثالی را از ویکی 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 ;
 

 

5.    بهبود مدیریت خطا

یکی دیگر از تغییرات بزرگی که در جدید ترین نسخه 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

 

6.    آرایه ها با یک ایندکس منفی شروع می شوند

در نسخه های قدیمی 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 )

البته این تغییر با کدهای قدیمی نوشته شده سازگار نیست.

 

7.    Weak Maps

کلاس جدیدی که در PHP 8 معرفی شده است، WeakMap می باشد. این کلاس پشتیبانی موجود را برای منابع ضعیف که در PHP 7.4 اضافه شده بودند، مورد استفاده قرار می دهد.  این کلاس منابع ضعیف را به شکل بسیار مفید تری گسترش می دهد.  طبق ویکی PHP، قابلیت WeakMap ایجاد نقشه از اشیا به مقادیر دلخواه ( مشابه SplObjectStorage ) و بدون جلوگیری از جمع آوری زباله هایی که به عنوان کلید استفاده می شوند، را در بر می گیرد. 

در صورت جمع آوری زباله ها، یک کلید شی، از نقشه حذف می شود. برطبق PHP Wiki ، نقشه های ضعیف همان ایجاد نقشه از اشیا to به مقادیر دلخواه ( مشابه SplObjectStorage ) و بدون جلوگیری از جمع آوری زباله هایی که به عنوان کلید استفاده می شوند. بنابراین با اینکه پشتیبانی از رفرنس های ضعیف در PHP 7.4 اضافه شده بود، اما از آنجا که رفرنس های ضعیف به خودی خود معمولاً رایج نیستند، از کاربرد کمتری برخور بود. همچنین این نحوه پیاده سازی رفرنس های ضعیف در PHP 7.4، افزودن یک ویژگی نقشه ضعیف را غیر ممکن کرده بود.

به همین منظور کل ویژگی برای PHP 8 حذف و بازنویسی شد. در نتیجه PHP 8 باید برای توسعه دهندگان بسیار مفید تر از نسخه های قبلی باشد.

 

دوره مرتبط و پیشنهادی آکادمی آی تی: پکیج آموزش PHP از مقدماتی تا پیشرفته

 

8.    رشته های عددی Saner

رشته های عددی Saner، رشته هایی هستند که می توانند به عنوان اعداد توسط زبان برنامه نویسی تفسیر شوند. در نسخه های پیشین PHP سه دسته برای این رشته های عددی وجود داشت:

•    رشته های عددی     

•    رشته های عددی پیشرو     

•    رشته های غیر عددی

بااینکه این دسته ها، رشته های عددی به حساب می آیند ولی دارای رفتار ها و عملکرد های متفاوتی هستند. در نسخه 8 منتظر شده از PHP این دسته ها در یک مفهوم واحد متحد شده اند. این اتحاد منجر به ایجاد یک سیستم بسیار ساده تر در پشت صحنه می شود. از مزایای دیگر این اتحاد شفاف سازی نتایج مورد انتظار برای توسعه دهندگان است و به آن ها کمک میکند، این تغییرات ایجاد شده بسیار برای کاربران مطلوب و خوشایند است.

 

PHP 8 و سازگاری با وردپرس

از آنجایی که وردپرس و پلاگین های آن به شدت به PHP وابسته هستند، در صورت عدم به روز رسانی نرم افزار دیگر، نسخه های جدید این زبان می تواند منجر به مشکلات سازگاری شود. خصوصأ برای نسخه های اصلی، مانند PHP 8 ایسن اتفاق رخ می دهد.  غالباً وردپرس نسخه های جدید خود را همزمان با به روز رسانی های اصلی PHP منتشر می کند تا به توسعه دهندگان کمک کند از انتقال روان آن اطمینان حاصل کنند. 

حال وردپرس اعلام کرده است که نسخه 5.6 را باید فقط سازگار با بتا بدانید.  آخرین نسخه وردپرس 5.6 برای تحقق این نقش طراحی شده است که با PHP 8 سازگار باشد. توسعه دهندگان آزمایشات نسبتاً گسترده ای را به این منظور انجام داده اند. با این حال هنوز خطرات و مشکلات موجود به طور کلی که با هسته وردپرس وجود دارد، کشف نشده است. در نتیجه هنوز توسعه دهندگان نمی توانند تضمین کنند که همه چیز به طور کامل کار منطبق و سازگار خواهد بود.  

به روز رسانی ایجاد شده در وردپرس فقط در هسته وردپرس اعمال می شود. افزونه ها و قالب ها توسط توسعه دهندگان شخص ثالث باید به طور جداگانه به روز شوند که این روند ممکن است مدتی طول بکشد. در نتیجه اگر می خواهید به روز رسانی را انجام دهید، باید دوباره بررسی کنید که قالب و افزونه هایی که استفاده می کنید توسط سازندگان آن ها دارای گواهی سازگاری باشند.

همچنین بهتر است قبل از اینکه به روزرسانی های مهم را اجرای کنید، آن ها را در سرور آزمایشی و در محیط زنده خود امتحان کنید. این آزمایش می تواند در یک محیط مرحله بندی شده ایجاد شود و از طریق حساب هاست شما انجام گیرد و یا می تواند با استفاده از ابزار هایی مانند XAMPP ، MAMP و Local که یک نسخه محلی از سایت را ایجاد می کنند، آزمایش شود. 

هر یک از این راه حل ها توسعه دهندگان را قادر می سازد تا یک کپی از سایت خود را مستقیماً در رایانه خود ایجاد نمایند.  با این کار می شود هرگونه آزمایش و تغییر پیکربندی را بدون تأثیر مستقیم بر سایت و زنده بررسی کرد. بیشتر ابزار های موجود توسعه دهندگان را قادر می سازند تا آنجا که دوست دارند نصب محلی ایجاد کنند، بنابراین این یک روش خارق العاده برای آزمایش به روز رسانی های جدید است.  

 

نتیجه گیری

برای php 8 ما شاهد تغییرات بسیار پر اهمیت بودیم. در نسخه‌‌ ی جدید PHP یعنی PHP 8 اهداف بسیار بزرگی وجود دارد که یکی از آن‌ ها تبدیل شدن به سریع ‌ترین زبان برنامه ‌نویسی مفسری دنیا است که با هر بار آپدیت PHP شاهد این هستیم که چقدر سرعت این زبان افزایش یافته است. پیشرفت های چشمگیری که در عملکرد و ویژگی های جدید در زبان محبوب PHP ایجاد شده است، و به طور خاص کامپایلر جدید JIT که باعث هیجان زیادی شده، بسیار مفید و کاربردی هستند.

هر چند قابلیت‌ های جدید PHP 8 در موارد ذکرشده خلاصه نمی ‌شوند و ابزارها و ویژگی‌ های جدید و جذاب بسیاری وجود دارد که برای این نسخه تعریف‌شده‌ است.

می ‌توان گفت کامپایلر JIT مهم ‌ترین و مورد انتظارترین ویژگی نسخه 8 پی اچ پی بود که نقطه پیشرفت جدیدی برای این زبان برنامه ‌نویسی خواهد بود. با این حال گروه توسعه ‌دهنده PHP همچنان با در نظر داشتن هدف تبدیل زبان پی اچ پی به سریع ‌ترین زبان برنامه ‌نویسی سمت سرور جهان، قابلیت‌ های جدید و پیشرفته بسیاری را به PHP 8 افزوده ‌اند. با توجه به موارد گفته شده نسخه ۸ پی اچ پی انتخابی مناسب برای برنامه نویسان و توسعه‌دهندگان وب خواهد بود.