การเปิดตัวภาษาโปรแกรม PHP 8.2

หลังจากหนึ่งปีของการพัฒนา ก็มีการนำเสนอภาษาการเขียนโปรแกรม PHP 8.2 ออกมา สาขาใหม่ประกอบด้วยชุดคุณสมบัติใหม่ เช่นเดียวกับการเปลี่ยนแปลงหลายประการที่ทำให้ความเข้ากันได้ลดลง

การปรับปรุงที่สำคัญใน PHP 8.2:

  • เพิ่มความสามารถในการทำเครื่องหมายชั้นเรียนเป็นแบบอ่านอย่างเดียว คุณสมบัติในคลาสดังกล่าวสามารถตั้งค่าได้เพียงครั้งเดียว หลังจากนั้นจะไม่สามารถเปลี่ยนแปลงได้ ก่อนหน้านี้ คุณสมบัติของคลาสแต่ละรายการสามารถทำเครื่องหมายเป็นแบบอ่านอย่างเดียว แต่ตอนนี้คุณสามารถเปิดโหมดนี้สำหรับคุณสมบัติของคลาสทั้งหมดพร้อมกันได้ การระบุแฟล็ก "อ่านอย่างเดียว" ที่ระดับคลาสยังบล็อกการเพิ่มคุณสมบัติแบบไดนามิกให้กับคลาสด้วย โพสต์คลาสแบบอ่านอย่างเดียว { ฟังก์ชันสาธารณะ __construct ( สตริงสาธารณะ $ ชื่อเรื่อง ผู้เขียนสาธารณะ $ ผู้เขียน ) {} } $post = โพสต์ใหม่ (/* … */); $post->unknown = 'ผิด'; // ข้อผิดพลาด: ไม่สามารถสร้างคุณสมบัติไดนามิก Post::$unknown
  • เพิ่มประเภทแยก "จริง", "เท็จ" และ "โมฆะ" ซึ่งสามารถรับค่าที่ถูกต้องได้เพียงค่าเดียวและใช้เพื่อส่งคืนฟังก์ชันที่มีแฟล็กการสิ้นสุดข้อผิดพลาดหรือค่าว่าง ก่อนหน้านี้ “true”, “false” และ “null” สามารถใช้ร่วมกับประเภทอื่นได้เท่านั้น (เช่น “string|false”) แต่ตอนนี้สามารถใช้แยกกันได้: function AlwaysFalse(): false { return false ; }
  • ให้ความสามารถในการกรองการตั้งค่าที่ละเอียดอ่อนในเอาต์พุตการติดตามสแต็กในเวลาที่เกิดข้อผิดพลาด อาจจำเป็นต้องตัดข้อมูลบางอย่างออกเมื่อข้อมูลเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นถูกส่งไปยังบริการของบุคคลที่สามโดยอัตโนมัติ ซึ่งจะติดตามปัญหาและแจ้งให้นักพัฒนาทราบเกี่ยวกับปัญหาเหล่านั้น ตัวอย่างเช่น คุณสามารถยกเว้นพารามิเตอร์จากการติดตามที่มีชื่อผู้ใช้ รหัสผ่าน และตัวแปรสภาพแวดล้อม การทดสอบฟังก์ชัน ( $foo, #[\SensitiveParameter] $password, $baz ) { โยนข้อยกเว้นใหม่ ('ข้อผิดพลาด'); } ทดสอบ ('foo', 'รหัสผ่าน', 'baz'); ข้อผิดพลาดร้ายแรง: ข้อยกเว้นที่ไม่ได้ตรวจจับ: ข้อผิดพลาดใน test.php:8 การติดตามสแต็ก: #0 test.php(11): การทดสอบ ('foo', Object (SensitiveParameterValue), 'baz') #1 {main} ถูกโยนใน test.php ออนไลน์8
  • อนุญาตให้กำหนดค่าคงที่ในลักษณะ (ลักษณะ กลไกในการใช้โค้ดซ้ำ) ค่าคงที่ที่กำหนดในลักษณะสามารถเข้าถึงได้ผ่านคลาสที่ใช้ลักษณะ (แต่ไม่ใช่ผ่านชื่อลักษณะ) ลักษณะฟู { สาธารณะ const CONSTANT = 1; แถบฟังก์ชั่นสาธารณะ (): int { กลับตัวเอง :: CONSTANT; // ข้อผิดพลาดร้ายแรง } } คลาสบาร์ { ใช้ Foo; } var_dump(แถบ::คงที่); // 1
  • เพิ่มความสามารถในการระบุประเภทในรูปแบบปกติที่แยกจากกัน (DNF, รูปแบบปกติที่แยกจากกัน) ซึ่งช่วยให้คุณสามารถรวมการรวมกันของประเภท (คอลเลกชันของสองประเภทขึ้นไป) และจุดตัดของประเภท (ประเภทที่มีค่าอยู่ภายใต้หลาย ๆ ประเภทพร้อมกัน) class Foo { แถบฟังก์ชันสาธารณะ ((A&B) | null $entity) { if ($entity === null) { return null; } ส่งคืน $entity; } }
  • มีการเสนอส่วนขยายใหม่ "สุ่ม" พร้อมด้วยฟังก์ชันและคลาสสำหรับการสร้างตัวเลขและลำดับแบบสุ่มหลอก โมดูลนี้มีอินเทอร์เฟซเชิงวัตถุ ช่วยให้คุณสามารถเลือกกลไกที่แตกต่างกันสำหรับการสร้างตัวเลขสุ่มหลอก รวมถึงที่เหมาะสมสำหรับใช้ในการเข้ารหัส และจัดเตรียมฟังก์ชันเสริม เช่น สำหรับการผสมอาร์เรย์และสตริงแบบสุ่ม การเลือกคีย์อาร์เรย์แบบสุ่ม การใช้เครื่องกำเนิดไฟฟ้าหลายเครื่องพร้อมกันกับสถานะอิสระของคุณเอง $rng = $is_production ? ใหม่ Random\Engine\Secure() : ใหม่ Random\Engine\Mt19937(1234); $randomizer = สุ่มใหม่\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,โซเดียม_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}"; ตกลง "สวัสดี $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:: วิธีการ"]
  • มีการเพิ่มคำสั่ง error_log_mode ในการตั้งค่า ซึ่งทำให้คุณสามารถกำหนดโหมดการเข้าถึงบันทึกข้อผิดพลาดได้

ที่มา: opennet.ru

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