تست آلفای PHP 8.2 آغاز شده است

اولین نسخه آلفا از شاخه جدید زبان برنامه نویسی PHP 8.2 ارائه شد. انتشار برای 24 نوامبر برنامه ریزی شده است. نوآوری های اصلی در حال حاضر برای آزمایش یا برنامه ریزی شده برای پیاده سازی در PHP 8.2 موجود است:

  • انواع جداگانه "false" و "null" اضافه شده است که می توان از آنها برای برگرداندن علامت اتمام با خطا یا مقدار خالی توسط یک تابع استفاده کرد. قبلاً، «false» و «null» فقط می‌توانستند همراه با انواع دیگر استفاده شوند (مثلاً «string|false»)، اما اکنون می‌توان آنها را جداگانه استفاده کرد: function alwaysFalse(): false { return false; }
  • قابلیت علامت گذاری کلاس به عنوان فقط خواندنی اضافه شد. ویژگی های چنین کلاس هایی را می توان تنها یک بار تنظیم کرد و پس از آن برای تغییر در دسترس نخواهند بود. قبلاً، ویژگی‌های کلاس منفرد می‌توانستند فقط خواندنی علامت‌گذاری شوند، اما اکنون می‌توانید این حالت را برای همه ویژگی‌های کلاس به طور همزمان روشن کنید. مشخص کردن پرچم "readonly" در سطح کلاس همچنین از افزودن پویا خصوصیات به کلاس جلوگیری می کند. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'اشتباه'; // خطا: نمی توان ویژگی پویا ایجاد کرد ارسال::$unknown
  • توانایی ایجاد پویا خصوصیات در یک کلاس منسوخ شده است (مانند "post->unknown" در مثال بالا). در PHP 9.0، دسترسی به خصوصیاتی که در ابتدا در کلاس تعریف نشده اند، منجر به خطا (ErrorException) می شود. کلاس هایی که متدهای __get و __set را برای ایجاد ویژگی ها ارائه می کنند، یا ویژگی های پویا در stdClass بدون تغییر به کار خود ادامه می دهند، فقط کار ضمنی با ویژگی های موجود متوقف می شود تا از توسعه دهنده در برابر خطاهای پنهان محافظت شود. برای کارکرد کد قدیمی، ویژگی "#[AllowDynamicProperties]" پیشنهاد شده است که امکان استفاده از ویژگی های پویا را فراهم می کند.
  • امکان فیلتر کردن تنظیمات حساس در خروجی ردیابی پشته را در زمان بروز خطا فراهم می کند. هنگامی که اطلاعات مربوط به خطاهایی که رخ می دهد به طور خودکار به سرویس های شخص ثالثی که مشکلات را ردیابی می کنند و توسعه دهندگان را در مورد آنها مطلع می کنند، ارسال می شود، ممکن است نیاز به حذف برخی از اطلاعات باشد. به عنوان مثال، می توانید پارامترهایی را از ردیابی حذف کنید که شامل نام کاربری، رمز عبور و متغیرهای محیطی است. 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
  • توانایی جایگزینی مقادیر متغیر به رشته‌ها با استفاده از عبارات "${var}" و ${(var)} منسوخ شده است. پشتیبانی از جایگزین های رایج "{$var}" و "$var" حفظ شده است. به عنوان مثال: "سلام {$world}"; OK "Hello $world"; OK "Hello ${world}"; منسوخ شده: استفاده از ${} در رشته ها منسوخ شده است
  • فراخوانی هایی که تا حدی پشتیبانی می شوند و می توانند از طریق "call_user_func($callable)" فراخوانی شوند منسوخ شده اند، اما از فراخوانی به شکل "$callable()": "self::method" "parent::method" "static ::" پشتیبانی نمی کنند. روش" ["خود"، "روش"] ["والد"، "روش"] ["ایستا"، "روش"] ["فو"، "بار::روش"] [فو جدید، "بار: :روش" "]
  • تبدیل مورد مستقل از محلی را پیاده سازی کرد. توابعی مانند strtolower() و strtoupper() در حال حاضر همیشه حروف حروف در محدوده ASCII را تبدیل می کنند، مانند زمانی که محلی را به "C" تنظیم می کنیم.

منبع: opennet.ru

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