การทดสอบอัลฟ่าของ PHP 8.2 เริ่มขึ้นแล้ว

การเปิดตัวเวอร์ชันอัลฟ่าครั้งแรกของสาขาใหม่ของภาษาการเขียนโปรแกรม PHP 8.2 ได้รับการนำเสนอแล้ว กำหนดวางจำหน่ายวันที่ 24 พฤศจิกายน นวัตกรรมหลักที่มีอยู่แล้วสำหรับการทดสอบหรือวางแผนสำหรับการใช้งานใน PHP 8.2:

  • มีการเพิ่มประเภท "false" และ "null" ที่แยกจากกัน ซึ่งสามารถใช้เพื่อส่งคืนสัญญาณของการเสร็จสิ้นโดยมีข้อผิดพลาดหรือค่าว่างโดยฟังก์ชัน ก่อนหน้านี้ "false" และ "null" สามารถใช้ร่วมกับประเภทอื่นได้เท่านั้น (เช่น "string|false") แต่ตอนนี้สามารถใช้แยกกันได้: function alwaysFalse(): false { return false; }
  • เพิ่มความสามารถในการทำเครื่องหมายชั้นเรียนเป็นแบบอ่านอย่างเดียว คุณสมบัติในคลาสดังกล่าวสามารถตั้งค่าได้เพียงครั้งเดียว หลังจากนั้นจะไม่สามารถเปลี่ยนแปลงได้ ก่อนหน้านี้ คุณสมบัติของคลาสแต่ละรายการสามารถทำเครื่องหมายเป็นแบบอ่านอย่างเดียว แต่ตอนนี้คุณสามารถเปิดโหมดนี้สำหรับคุณสมบัติของคลาสทั้งหมดพร้อมกันได้ การระบุแฟล็ก "อ่านอย่างเดียว" ที่ระดับคลาสยังบล็อกการเพิ่มคุณสมบัติแบบไดนามิกให้กับคลาสด้วย โพสต์คลาสแบบอ่านอย่างเดียว { ฟังก์ชันสาธารณะ __construct ( สตริงสาธารณะ $ ชื่อเรื่อง ผู้เขียนสาธารณะ $ ผู้เขียน ) {} } $post = โพสต์ใหม่ (/* … */); $post->unknown = 'ผิด'; // ข้อผิดพลาด: ไม่สามารถสร้างคุณสมบัติไดนามิก Post::$unknown
  • ความสามารถในการสร้างคุณสมบัติแบบไดนามิกในคลาสเลิกใช้แล้ว (เช่น "post->unknown" ในตัวอย่างด้านบน) ใน PHP 9.0 การเข้าถึงคุณสมบัติที่ไม่ได้กำหนดไว้แต่เดิมในคลาสจะทำให้เกิดข้อผิดพลาด (ErrorException) คลาสที่มีเมธอด __get และ __set สำหรับการสร้างคุณสมบัติ หรือคุณสมบัติไดนามิกใน stdClass จะทำงานต่อไปโดยไม่มีการเปลี่ยนแปลง เฉพาะการทำงานโดยนัยกับคุณสมบัติที่ไม่มีอยู่จริงเท่านั้นที่จะหยุดทำงาน เพื่อป้องกันนักพัฒนาจากข้อผิดพลาดที่ซ่อนอยู่ เพื่อให้โค้ดเก่าใช้งานได้ มีการเสนอแอตทริบิวต์ "#[AllowDynamicProperties]" ซึ่งอนุญาตให้ใช้คุณสมบัติไดนามิกได้
  • ให้ความสามารถในการกรองการตั้งค่าที่ละเอียดอ่อนในเอาต์พุตการติดตามสแต็กในเวลาที่เกิดข้อผิดพลาด อาจจำเป็นต้องตัดข้อมูลบางอย่างออกเมื่อข้อมูลเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นถูกส่งไปยังบริการของบุคคลที่สามโดยอัตโนมัติ ซึ่งจะติดตามปัญหาและแจ้งให้นักพัฒนาทราบเกี่ยวกับปัญหาเหล่านั้น ตัวอย่างเช่น คุณสามารถยกเว้นพารามิเตอร์จากการติดตามที่มีชื่อผู้ใช้ รหัสผ่าน และตัวแปรสภาพแวดล้อม การทดสอบฟังก์ชัน ( $foo, #[\SensitiveParameter] $password, $baz ) { โยนข้อยกเว้นใหม่ ('ข้อผิดพลาด'); } ทดสอบ ('foo', 'รหัสผ่าน', 'baz'); ข้อผิดพลาดร้ายแรง: ข้อยกเว้นที่ไม่ได้ตรวจจับ: ข้อผิดพลาดใน test.php:8 การติดตามสแต็ก: #0 test.php(11): การทดสอบ ('foo', Object (SensitiveParameterValue), 'baz') #1 {main} ถูกโยนใน test.php ออนไลน์8
  • เลิกใช้ความสามารถในการแทนค่าตัวแปรเป็นสตริงโดยใช้นิพจน์ "${var}" และ ${(var)}" การสนับสนุนสำหรับการแทนที่ "{$var}" และ "$var" ที่ใช้กันทั่วไปยังคงอยู่ ตัวอย่างเช่น: "สวัสดี {$world}"; ตกลง "สวัสดี $world"; ตกลง "สวัสดี ${world}"; เลิกใช้แล้ว: การใช้ ${} ในสตริงจะเลิกใช้แล้ว
  • เลิกใช้ callable ที่รองรับบางส่วนที่สามารถเรียกผ่าน "call_user_func($callable)" แต่ไม่รองรับการโทรในรูปแบบ "$callable()": "self::method" "parent::method" "static::method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar:: วิธีการ"]
  • ดำเนินการแปลงกรณีและปัญหาโดยไม่ขึ้นกับโลแคล ฟังก์ชันอย่างเช่น strtolower() และ strtoupper() จะแปลงตัวพิมพ์เล็กและใหญ่ของอักขระในช่วง ASCII เสมอ เช่นเดียวกับเมื่อตั้งค่าโลแคลเป็น "C"

ที่มา: opennet.ru

เพิ่มความคิดเห็น