ویژگی های جدید php 8.2 به همراه بروزرسانی های مهم

اخبار

5 دقیقه زمان مطالعه
زبان PHP یک زبان برنامه نویسی سمت سرور است که برای تولید صفحات و برنامه های وب مورد استفاده قرار می گیرد.
این زبان در ابتدا به عنوان مجموعه ای از اسکریپت ها، برای مدیریت صفحات شخصی توسعه داده شد اما در سال 1998 بطور رسمی به عنوان یک زبان برنامه نویسی وب معرفی و پا به عرصه گذاشت.
PHP ویژگی های فراوانی دارد که شاخص ترین آن، پشتیبانی از بانک های اطلاعاتی مختلف مانند MySQL، PostgreSQL، Oracle و Microsoft SQL Server است.
با انتشار نسخه های جدید، PHP توانسته مسیر پیشرفت و تکامل را بسرعت طی کرده و علاوه بر توسعه قابلیت های جدید، آیتم های منسوخ شده را از رده خارج و با فناوری های جدید جایگزین سازد. به عنوان مثال PHP با انتشار ورژن 7 در سال 2015، عملکرد خود را نسبت به نسخه 5 تا 150 درصد بهبود داد که در نوع خود بی نظیر است.
نسل 8 زبان PHP آن را به یک زبان برنامه نویسی بالغ تبدیل کرده که از پایداری فنی بالایی برخوردار است. به عنوان یک زبان مقیاس پذیر و مدرن، PHP 8.2 در حالی منتشر شد که ویژگی های منحصربفرد آن مورد توجه قرار گرفته و در نوع خود تحولی بزرگ را رقم می زند.
 

آشنایی با ویژگی های شاخص PHP 8.2

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

تابع memory_reset_peak_usage

این تابع می تواند در برنامه هایی که یک عمل یا اکشن چندین بار فراخوان و تکرار می شود بسیار مفید باشد. بدین ترتیب توسعه دهندگان نیز میزان مصرف حافظه را که توسط memory_get_peak_usage بر می گردد می توانند بازنشانی کنند.
 

کلاس های فقط خواندنی – Readonly Classes

قابلیت ReadOnly کلاس ها از PHP 8.1 معرفی شد که تحول بزرگی را نیز به ارمغان آورد. هرچند این امر در نسخه 8.1 با چالش های خاص خود همراه بود، اما در PH 8.2 بطور کامل رفع شد. نسخه جدید اجازه می دهد تا کل کلاس ها را بتوان به عنوان فقط خواندنی علامت گذاری و کار را برای توسعه دهندگان آسان تر کند.
 

رندوم اکستنشن – random extension

عملگرهای RNG به کمک random extension می توانند بی نیاز از API به کار خود ادامه دهند. همچنین توابع rand، mt_rand، random_bytes و random_int نیز دیگر نیازی به تغییر نخواهند داشت.
 
PHP 8.1 added support for readonly properties

پشتیبانی از Sensitive Parameter Value Redaction

توابعی که اطلاعات حساس از جمله رمز عبور و کلیدهای خصوصی را دریافت می کنند می توانند پارامترها را با ویژگی #[\SensitiveParameter] مشخص کنند. حال در صورتیکه تابع فراخوانی شده باعث خطای PHP شود، مقدار ارسال شده به پارامتر با یک آبجکت \SensitiveparameterValue جایگزین می شود.

اعلان آیتم های منسوخ شده – deprecation notice

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

بهبود ویژگی تابع constructor در شی گرایی

لطفا به این کد دقت کنید

class Money 
{
    public Currency $currency;
    public int $amount;
    public function __construct(
        Currency $currency,
        int $amount,
    ) {
        $this->currency = $currency;
        $this->amount = $amount;
    }
}

همان‌طور که ملاحظه می کنید، دو property یا ویژگی با نام های currency و amount تعریف شده است. حال می خواهیم این دو ویژگی را به وسیله تابع constructor مقدار دهی کنیم، پس نام دو ویژگی را درون پرانتزهای تابع constructor می آوریم و درون براکت {} آنها را مقدار دهی می کنیم.

بروزرسانی جدید به ما این امکان را می دهد تا براحتی بتوانیم تمام کارهایی که بسیار طولانی و زمان بر بود را فقط با قرار دادن ویژگی ها – (property) درون پرانتز () تابع constructor تعریف و مقداردهی کنیم.

return تایپ جدید static

ادر گذشته باید نوع self را return و یا به عنوان خروجی بر می گرداندیم که برای نوع static امکان پذیر نبود. اما به لطف بروزرسانی جدید و با توجه به ماهیت داینامیک (dynamic) بودن PHP، این امکان میسر شده که ویژگی بسیار کاربردی برای توسعه دهنده‌گان PHP است تا بتوانند خروجی یا return با نوع static داشته باشند.

class Foo { public function test(): static { return new static(); } }

ارث بری با توابع private

نسخه های قبل از PHP 8، بررسی های انجام شده بر روی متدهای public و protected بر روی private نیز انجام می شد. به عبارت دیگر متدهای private باید همان قوانینی را پیروی می کردند که متدهای protected و public نیز از آن طبیعیت داشتند. از آن جایی که متدهای private درون کلاس های فرزند در درسترس نیستند، چالش بزرگی همواره برای توسعه دهندگان بوجود می آمد.

اما RFC این رفتار را تغییر داده و دیگر بررسی های مرتبط با ارث بری متدهای private اعمال نخواهد شد. بدین ترتیب استفاده از final private function نیز معنی نخواهد داشت و اگر هم این مورد استفاده شود Warning زیر نمایش داده می شود:

Warning: Private methods cannot be final as they are never overridden by other classes

 

توسعه توابع و کلاس های جدید

علاوه بر ویژگی های جدید، این نسخه از PHP مجموعه از توابع و کلاس های جدید را نیز با خود بهمراه داشته که به شرح زیر است:

تابع جدید str_contains

این تابع باعث می شود تا به جای استفاده از strpos در بررسی این که آیا رشته ای درون رشته‌ دیگر وجود دارد یا خیر از تابع str_contains استفاده شود.

 

توابع جدید str_starts_with و str_ends_with

همانطور که از نام این دو تابع پیداست، تابع str_starts_with بررسی می کند آیا رشته ای که به عنوان پارامتر اول داده شده با رشته ای که پارامتر دوم داده، شروع می شود یا خیر. تابع str_ends_with هم برعکس این کار را انجام و انتها یا پایان یک رشته را بررسی می کند.

 

تابع جدید fdiv

تابع جدید fdiv مانند توابع قبلی fmod و intdiv نیست زیرا این تابع تقسیم بر صفر را امکان پذیر کرده و به جای اینکه خطا دریافت شود، سه مقدار INF برای مثبت بی نهایت، INF- برای منفی بی نهایت و NAN که به معنی Not a Number (عدد نیست) است را بر می گرداند.

 

تابع جدید get_debug_type

تابع get_debug_type نوع یک متغیر را به عنوان خروجی بر می گرداند. هرچند این تابع شباهت زیادی به تابع gettype دارد اما جزئیات بیشتری برای آرایه ها، رشته ها، کلاس ها و اشیای دارای نام مستعار (anonymous) به ما می دهد.

تابع جدید get_resource_id

Resource ها متغیرهای خاص درون PHP هستند که به Resource های بیرونی اشاره می کنند. Curl Handler، اتصال به پایگاه داده و باز کردن یک فایل درون کد، می توانند مثال هایی از Resource ها باشند که به int تبدیل یا cast شوند. قبلا این کار با قرار دادن (int) پشت متغیر تبدیل می شد اما الان در PHP 8 تابع get_resource_id اضافه شده و این کار را بسیار ساده تر می کند.

مزیت استفاده از تابع get_resource_id این است که یک نوع امن به عنوان خروجی برگردانده و از قبل بررسی می کند که نوع آن نیز int باشد.

Parse INI quantity values: ini_parse_quantity

ini_parse_quantity('256M'); // 268435456

Maintain a Curl connection alive: curl_upkeep

Retrieve Cipher Key Length: openssl_cipher_key_length

openssl_cipher_key_length("CHACHA20-POLY1305"); // 32
openssl_cipher_key_length("AES-128-GCM"); // 16
openssl_cipher_key_length("AES-256-GCM"); // 32

Reset recorded peak memory usage: memory_reset_peak_usage

Dynamic Properties Deprecated

class User { public int $uid; } $user = new User(); $user->name = ‘Foo’;


نویسنده علیرضا ناجی

سایر مقالات نویسنده

2

دیدگاه ها

ارسال دیدگاه

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

ارسال دیدگاه