آشنایی با ویژگی های شاخص PHP 8.2
تابع memory_reset_peak_usage
کلاس های فقط خواندنی – Readonly Classes
رندوم اکستنشن – random extension
پشتیبانی از Sensitive Parameter Value Redaction
اعلان آیتم های منسوخ شده – deprecation notice
بهبود ویژگی تابع 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
توسعه توابع و کلاس های جدید
تابع جدید 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’;
قشنگ معلومه با گوگل ترنسلیت ترجمه و بدون ویراستاری اینجا پیست شده
با درود. ضمن تشکر از نکته سنجی و اعلام این موضوع، متن فوق برای بروزرسانی پیش نویس شده بود ولی پس از ذخیره نسخه نهایی، تغییرات اعمال نشده بود که اکنون مجدد بروزرسانی و منتشر شد. از مشارکت شما سپاسگزاریم