در این مقاله در مورد PHP 7 صحبت میکنیم. به نظرم مطالعه تاریخچه تغییرات در کنار معرفی منابع آموزشی این فرصت رو به ما میده تا با چیزی عمیق تر آشنا بشیم و نسبت بهش تسلط بیشتری پیدا کنیم.
تمام تلاشم رو کردم تا بتونم برای هر قسمت منابع مختلفی معرفی کنم ولی متاسفانه بهخاطر قوانین ویرگول این کار شدنی نیست. برای همین تو نسخه فارسی این سری از مقالات نتونستم اینکار رو انجام بدم و بهجاش در آخر یکسری منابع کلی معرفی کردم ولی اگر دوست دارید تمام منابع دسترسی داشته باشید لطفا نسخه انگلیسی این مقاله تو لینکدین یا مدیوم رو ببینید، اونجا برای هر قسمت منابع مناسبی رو معرفی کردم.
زبان PHP در نسخه هفتم پیشرفتهای زیادی داشته، مثلا سرعتش تقریبا 2 برابر شده و مقدار استفاده از حافظه هم کاهش پیدا کرده، ویژگیهایی هم بهش اضافه شده که گوشهای از اونها رو باهم بررسی میکنیم:
۱. افزوده شدن قابلیت تعیین نوع مقادیر scalar: از این نسخه میشه نوع پارامترهای ورودی و خروجی رو به صورت کاملتری تعریف کنیم، در واقع میتونیم تعیین کنیم که کاربر string، int، float و bool وارد کنه.
۲. افزوده شدن عملگر Null coalescing (??): گاها نیاز هست تا بررسی کنیم که آیا یک متغیر خالی هست یا نه، تو این نسخه کار توسعهدهندههارو با اضافه کردن این عملگر راحتتر کردند.
۳. افزوده شدن عملگر spaceship(<=>): این عملگر برای مقایسه 2 تا عبارت استفاده میشه، اگر 2 عبارت مساوی باشن مقدار 0 برمیگردونه، اگر عبارت سمت چپ(عبارت اول) بزرگتر باشه مقدار 1 برمیگردونه و اگر عبارت سمت راست(عبارت دوم) بزرگتر باشه مقدار ۱- برمیگردونه.
۴. افزوده شدن define برای تعریف ثابتها: همونطور که تو نسخه ۵ دیده بودیم، میشد با const مقادیر ثابت رو تعریف کرد ولی از اونجایی که یهسری محدودیت داشت با اضافه شدن define دست توسعهدهنده باز تر هست و میتونه براساس موقعیتی که وجود داره تصمیم بگیره.
۵. افزوده شدن anonymous class: توانایی ایجاد کلاس ناشناس از نسخه هفتم به PHP اضافه شد، یکی از موارد کاربردش هم میشه به کلاس مربوط به migrationها در لاراول اشاره کرد که به این صورت تعریف میشن.
۶. افزوده شدن قابلیت فراخوانی توابع با call: با این روش فراخوانی توابع میتونیم یک object رو به تابع پاس بدیم تا مقدار this$ اون تابع نسبت به اون object تعیین بشه.
۷. افزوده شدن قابلیت استفاده از کلمه کلیدی use به صورت گروهی: لازم نیست کلاسهایی که از namespace مشترک وارد میشند رو در خطهای جدا مشخص کنیم، بلکه میتونیم اونهارو به صورت گروهی فراخوانی کنیم.
۸. افزودن شدن قابلیت return در generator: از این نسخه به بعد این امکان به وجود اومد تا به عنوان مقدار آخر generator ها پس از تمامی yieldها مقدار دیگهای رو return کنیم و بتونیم اون رو با تابع ()getReturn دریافت کنیم.
۹. افزوده شدن قابلیت ترکیب generatorها: با توجه به این ویژگی میتونیم generator های مختلف با دستور yield from داخل همدیگه فراخوانی کنیم و از اونها استفاده کنیم.
۱. افزوده شدن امکان تعیین ورودی و خروجی null: به کمک این ویژگی میتونیم در تعیین ورودی یا خروجی تابع یک type تعیین کنیم(مثلا string) و در کنارش علامت سوال قرار بدیم تا مشخص کنیم اون تابع به عنوان ورودی یا خروجی میتونه نوع string یا null بگیره.
۲. افزوده شدن قابلیت تعیین void به عنوان نوع خروجی تابع: توابعی که return ندارند یا return اونها نتیجه خاصی برنمیگردونه میتونن به عنوان نوع خروجی تابع این کلمه کلیدی رو در نظر داشته باشن.
۳. افزوده شدن قابلیت array destructuring: با کمک این ویژیگی میشه اجزاء تشکیل دهندهی آرایهها رو استخراج کرد و تو متغیرهای دیگهای ذخیره کرد.
۴. تعیین سطح دسترسی برای const در کلاسها: به کمک این ویژگی میتوان تعیین کرد که مقادیر const به چه صورت در دسترس باشند.
۵. توانایی مدیریت چندگانه خطاها: در این نسخه از PHP این امکان وجود دارد که در قسمت catch مربوط به مدیریت خطاها باتوجه به علامت "|" یا همان "پایپ" بتوانیم از Exceptionهای متفاوت استفاده کنیم.
۱. افزوده شدن Object به عنوان نوع ورودی و خروجی: از این نسخه قابلیت تعیین Object به عنوان نوع ورودی و خروجی توابع در کنار بقیه مقادیر مثل int و string میتونه استفاده بشه.
۲. افزودن شدن قابلیت Abstract method overriding: وقتی یک کلاس abstract از یک کلاس abstract دیگهای ارثبری کنه و کلاس فرزند متد abstract مشابه کلاس والد داشته باشه متد موجود در فرزند override میشه.
۳. بهبود رمزنگاری: کتابخانه رمزنگاری sodium به طور پیشفرض به PHP اضافه شد و همچنین پشتیبانی از Argon2 هم به password hashing API اضافه شده است.
۴. پشتیبانی از قابلیت trailing comma: از این نسخه میتونید بعد از آخرین ایتم ها در آرایه یا… یک کاما(,) قرار بدید تا برای اضافه کردن آیتمهای جدید نیاز به ایجاد تغییر در آخرین خط نباشه.
ویژگیهای مختلف در این نسخه بهبود پیدا کردند، توابعی مثل ()array_key_first یا ()array_key_last اضافه شده ولی ویژگیهای جدید خبرسازی طی این نسخه اضافه نشده، بیاید باهم یه سری از ویژگیهارو بررسی کنیم:
۱. پشتیبانی از Array destructuring ارجاع منبع: از این نسخه در array destructuring و ()list این قابلیت وجود داره که یک آیتم به طور مستقیم با منبع اصلیش کپی بشه(ایتم جدید و قدیم به یک مکان از حافظه اشاره کنند) نه مثل قبل که یک کپی ساده ازش گرفته میشد. به نظرم برای درک بهتر این مطلب لازمه که این مثال از مستندات PHP رو ببینید.
۱. پشتیبانی پراپرتیهای کلاسها از تعیین سطح دسترسی: از این نسخه به بعد قابلیت تعیین نوع برای مقادیر یک پراپرتی در کلاس وجود داره و به غیر از public، protected یا private بودن میشه تعیین کرد که متغیر ما از چه نوعی(مثلا array یا int) باید باشه.
۲. افزوده شدن قابلیت arrow function: اگر با JavaScript آشنا هستید مسلما اسم arrow function هم به گوشتون خورده. از این نسخه به بعد میتونیم از arrow function ها برای نوشتن توابع تک خطی در PHP استفاده کنیم.
۳. پشتیبانی از Null coalescing حین تعیین متغیرها: این مورد در واقع یک syntactic sugar هست برای تعریف متغیرها که لازمه برای درک بهتر با یک مثال از مستندات PHP نشونش بدم.
۴. افزوده قابلیت unpack کردن آرایهها در یکدیگر: با توجه به این ویژگی قابلیتی وجود داره که میتونیم مقادیر یک آرایه رو به کمک "…" در آرایه دیگر بریزیم. برای درک بهتر لازمه که مثالی از مستندات PHP ببینیم.
۵. قابلیت جداسازی اعداد با "_": از این نسخه امکان جداسازی اعداد به کمک "_" وجود داره، یکی از فواید این کار افزایش خوانایی اعداد هست، به مثال روبرو توجه کنید: 299_792_458
با گوشهای از ویژگیها و تغییرات PHP 7 آشنا شدیم، خوشحال میشم که نظرات و پیشنهادات شما رو بدونم تا بتونم مطالب بهتری بنویسم. همونطور که گفتم بخاطر یکسری محدودیتها نتونستم تمامی منابع رو معرفی کنم، لطفا برای دیدن منابع کامل لطفا به نسخه انگلیسی این مقاله تو لینکدین یا مدیوم سر بزنید، ولی اگر فرصت اینکار رو ندارید این چندتا منبع رو داشته باشید.