انتشار زبان برنامه نویسی PHP 8.2

پس از یک سال توسعه، انتشار زبان برنامه نویسی PHP 8.2 ارائه شد. شاخه جدید شامل یک سری ویژگی های جدید و همچنین چندین تغییر است که سازگاری را از بین می برد.

پیشرفت های کلیدی در PHP 8.2:

  • قابلیت علامت گذاری کلاس به عنوان فقط خواندنی اضافه شد. ویژگی های چنین کلاس هایی را می توان تنها یک بار تنظیم کرد و پس از آن برای تغییر در دسترس نخواهند بود. قبلاً، ویژگی‌های کلاس منفرد می‌توانستند فقط خواندنی علامت‌گذاری شوند، اما اکنون می‌توانید این حالت را برای همه ویژگی‌های کلاس به طور همزمان روشن کنید. مشخص کردن پرچم "readonly" در سطح کلاس همچنین از افزودن پویا خصوصیات به کلاس جلوگیری می کند. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'اشتباه'; // خطا: نمی توان ویژگی پویا ایجاد کرد ارسال::$unknown
  • انواع جداگانه "true"، "false" و "null" اضافه شده است، که می توانند فقط یک مقدار معتبر بگیرند و برای مثال برای برگرداندن یک تابع با پرچم پایان خطا یا مقدار خالی استفاده می شوند. قبلاً، «true»، «false» و «null» فقط می‌توانستند همراه با انواع دیگر (مثلاً «string|false») استفاده شوند، اما اکنون می‌توان آنها را جداگانه استفاده کرد: تابع alwaysFalse(): false { return false ; }
  • امکان فیلتر کردن تنظیمات حساس در خروجی ردیابی پشته را در زمان بروز خطا فراهم می کند. هنگامی که اطلاعات مربوط به خطاهایی که رخ می دهد به طور خودکار به سرویس های شخص ثالثی که مشکلات را ردیابی می کنند و توسعه دهندگان را در مورد آنها مطلع می کنند، ارسال می شود، ممکن است نیاز به حذف برخی از اطلاعات باشد. به عنوان مثال، می توانید پارامترهایی را از ردیابی حذف کنید که شامل نام کاربری، رمز عبور و متغیرهای محیطی است. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); خطای مهلک: Uncaved Exception: خطا در test.php:8 ردیابی پشته: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} در test.php پرتاب شد آنلاین 8
  • مجاز به تعریف ثابت در صفات (ویژگی، مکانیزمی برای استفاده مجدد از کد). ثابت های تعریف شده در یک صفت را می توان از طریق کلاسی که از این صفت استفاده می کند (اما نه از طریق نام صفت) دسترسی داشت. صفت Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // خطای مرگبار } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • اضافه شدن قابلیت تعیین انواع در فرم نرمال منفک (DNF، Disjunctive Normal Form) که به شما امکان می دهد اتحاد انواع (مجموعه های دو یا چند نوع) و تلاقی انواع (انواعی که مقادیر آنها تحت چندین نوع قرار می گیرد) ترکیب کنید. انواع به طور همزمان). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } بازگشت $entity; } }
  • یک پسوند جدید "تصادفی" با توابع و کلاس ها برای تولید اعداد و دنباله های شبه تصادفی پیشنهاد شده است. این ماژول یک رابط شی گرا ارائه می دهد، به شما امکان می دهد موتورهای مختلف را برای تولید اعداد شبه تصادفی انتخاب کنید، از جمله موتورهای مناسب برای استفاده در رمزنگاری، و عملکردهای کمکی را فراهم می کند، به عنوان مثال، برای مخلوط کردن تصادفی آرایه ها و رشته ها، انتخاب کلیدهای آرایه تصادفی، استفاده همزمان از چندین ژنراتور با کشور مستقل خودتان. $rng = $is_production ? new Random\Engine\Secure(): new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • تبدیل مورد مستقل از محلی را پیاده سازی کرد. توابعی مانند strtolower() و strtoupper() در حال حاضر همیشه حروف حروف در محدوده ASCII را تبدیل می کنند، مانند زمانی که محلی را به "C" تنظیم می کنیم.
  • توابع جدید اضافه شد: mysqli_execute_query، curl_upkeep، memory_reset_peak_usage، ini_parse_quantity، libxml_get_external_entity_loader، sodium_crypto_stream_xchacha20_xor_ic، openssl_cipher_key_length.
  • روش‌های جدید اضافه شد: mysqli::execute_query، ZipArchive::getStreamIndex، ZipArchive::getStreamName، ZipArchive::clearError، ReflectionFunction::isAnonymous، ReflectionMethod::hasPrototype.
  • توانایی ایجاد پویا خواص در یک کلاس منسوخ شده است. در PHP 9.0، دسترسی به خصوصیاتی که در ابتدا در کلاس تعریف نشده اند، منجر به خطا (ErrorException) می شود. کلاس هایی که متدهای __get و __set را برای ایجاد ویژگی ها ارائه می کنند، یا ویژگی های پویا در stdClass بدون تغییر به کار خود ادامه می دهند، فقط کار ضمنی با ویژگی های غیر موجود برای محافظت از توسعه دهنده در برابر اشکالات پنهان پشتیبانی می شود. برای حفظ کار کد قدیمی، ویژگی "#[AllowDynamicProperties]" پیشنهاد شده است که امکان استفاده از ویژگی های پویا را فراهم می کند.
  • توانایی جایگزینی مقادیر متغیر به رشته‌ها با استفاده از عبارات "${var}" و ${(var)} منسوخ شده است. پشتیبانی از جایگزین های رایج "{$var}" و "$var" حفظ شده است. به عنوان مثال: "سلام {$world}"; OK "Hello $world"; OK "Hello ${world}"; منسوخ شده: استفاده از ${} در رشته ها منسوخ شده است
  • فراخوانی هایی که تا حدی پشتیبانی می شوند و می توانند از طریق "call_user_func($callable)" فراخوانی شوند منسوخ شده اند، اما از فراخوانی به شکل "$callable()": "self::method" "parent::method" "static ::" پشتیبانی نمی کنند. روش" ["خود"، "روش"] ["والد"، "روش"] ["ایستا"، "روش"] ["فو"، "بار::روش"] [فو جدید، "بار: :روش" "]
  • دستور error_log_mode به تنظیمات اضافه شده است که به شما امکان می دهد حالت دسترسی به گزارش خطا را تعیین کنید.

منبع: opennet.ru

اضافه کردن نظر