پس از یک سال توسعه، انتشار زبان برنامه نویسی PHP 8.3 ارائه شد. شاخه جدید شامل یک سری ویژگی های جدید و همچنین چندین تغییر است که سازگاری را از بین می برد.
تغییرات کلیدی در PHP 8.3:
- در طول کلونینگ کلاس، می توان خصوصیات را با ویژگی "readonly" دوباره مقدار دهی کرد. لغو ویژگی های فقط خواندنی فقط در داخل تابع "__clone" مجاز است: فقط خواندنی کلاس Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // مجاز است حتی اگر ویژگی "createdAt" فقط خواندنی باشد. } }
- امکان استفاده از ثابت ها با نشانگر نوع در کلاس ها، صفات و شمارش ها فراهم شده است: class Foo { const string BAR = 'baz'; }
- پشتیبانی از ویژگی «#[Override]» اضافه شده است، که با آن توسعهدهنده میتواند به مفسر اطلاع دهد که روش علامتگذاری شده برخی از روشهای والد را لغو میکند. اگر لغو وجود نداشته باشد، مفسر یک خطا نمایش می دهد.
- تغییر مدیریت مقادیر منفی به عنوان شاخص آرایه. به عنوان مثال، هنگام اضافه کردن یک عنصر با عدد "-5" به یک آرایه خالی و اضافه کردن عنصر دیگر، قبلا عنصر دوم با اندیس "0" ذخیره می شد، اما از نسخه PHP 8.3 با ایندکس "-4" ذخیره می شود. . آرایه $ = []; $array[-5] = 'a'; $array[] = 'b'; var_export ($array); // آرایه بود (-5 => 'a'، 0 => 'b') // آرایه شد (-5 => 'a'، -4 => 'b')
- قابلیت ایجاد کلاس های ناشناس در حالت فقط خواندنی اضافه شد: $class = new class only reading { public function __construct( public string $foo = 'bar', ) {} };
- تابع json_validate() اضافه شد تا سریعاً بدون انجام عملیات رمزگشایی یک رشته در قالب JSON باشد یا خیر. json_validate(string $json، int $depth = 512، int $flags = 0): bool
- روشهای جدیدی به کلاس Randomizer اضافه شدهاند که یک API سطح بالا برای تولید اعداد و دنبالههای شبه تصادفی فراهم میکند: getBytesFromString برای تولید رشتهای با اندازه معین، با استفاده از ترتیب تصادفی کاراکترهای موجود در رشته دیگر. getFloat و nextFloat برای تولید یک عدد ممیز شناور تصادفی که در محدوده مشخص شده قرار می گیرد.
- قابلیت بازیابی ثابت ها با استفاده از نحو کلاس پویا اضافه شد: class Foo { const BAR = 'bar'; } $name = 'BAR'; // قبلاً برای بازیابی ثابت BAR، باید ثابت (Foo::class . '::' . $name); // اکنون فقط Foo را مشخص کنید::{$name};
- در صورت بروز مشکلاتی که در عملیات کار با تاریخ و زمان به وجود می آیند، تولید استثناهای جداگانه (DateMalformedIntervalStringException، DateInvalidOperationException، DateRangeError) اضافه شده است.
- مدیریت بهتر خطاهایی که در طول تجزیه داده های سریال در تابع unserialize رخ می دهد. در صورت بروز مشکل، unserialize() اکنون به جای E_NOTICE، E_WARNING را صادر می کند.
- تغییراتی در تابع range() ایجاد شده است. هنگام تلاش برای ارسال اشیا، منابع یا آرایهها در متغیرهایی که مرزهای محدوده را تعیین میکنند، و همچنین هنگام تعیین یک مقدار منفی در پارامتر $step یا یک مقدار تعریفنشده در هر پارامتر، یک استثنا ایجاد میشود. اکنون می توان با تعیین رشته ها به جای اعداد، فهرستی از کاراکترها را خروجی کرد (به عنوان مثال، "محدوده ('5'، 'z')").
- رفتار صفات را با ویژگیهای استاتیک تغییر داد، که اکنون ویژگیهای استاتیک به ارث رسیده از کلاس والد را لغو میکند.
- تنظیمات برای حفاظت از سرریز پشته اضافه شده است. دستورالعملهای zend.max_allowed_stack_size و zend.reserved_stack_size به فایل ini اضافه شدهاند که حداکثر اندازه مجاز و رزرو شده پشته را تعریف میکنند. برنامه در هنگام نزدیک شدن به اتمام پشته، زمانی که پشته بیش از اختلاف بین zend.max_allowed_stack_size و zend.reserved_stack_size پر شود، از کار می افتد (قبل از اینکه خطای تقسیم بندی رخ دهد، اجرا متوقف می شود). به طور پیش فرض، مقدار zend.max_allowed_stack_size روی 0 تنظیم شده است (0 - اندازه به طور خودکار تعیین می شود؛ برای غیرفعال کردن محدودیت، می توانید آن را روی -1 تنظیم کنید).
- توابع جدید POSIX posix_sysconf()، posix_pathconf()، posix_fpathconf() و posix_eaccess().
- تابع mb_str_pad اضافه شده است که آنالوگ تابع رشته ای str_pad() است که برای کار با کدهای چند بایتی مانند UTF-8 طراحی شده است.
- به شما امکان میدهد بستههایی را از متدها ایجاد کنید و آرگومانهای نامگذاری شده را به آن بستهها ارسال کنید. $test = new Test(); $closure = $test->magic(…); $closure(a: 'سلام'، b: 'جهان');
- تغییر رفتار در هنگام مدیریت رویت ثابت ها در رابط ها. رابط I { public const FOO = 'foo'; } کلاس C I { private const FOO = 'foo'; }
- قابلیت های توابع array_sum()، array_product()، posix_getrlimit()، gc_status()، class_alias()، mysqli_poll()، array_pad() و proc_get_status() گسترش یافته است.
- توانایی ارسال مقدار منفی $widths به mb_strimwidth() منسوخ شده است. ثابت NumberFormatter::TYPE_CURRENCY حذف شده است. پشتیبانی از فراخوانی تابع ldap_connect() با دو پارامتر $host و $port قطع شده است. تنظیمات opcache.consistency_checks حذف شده است.
منبع: opennet.ru