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

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

การเปลี่ยนแปลงที่สำคัญใน PHP 8.3:

  • เมื่อทำการโคลนคลาส ขณะนี้สามารถกำหนดค่าคุณสมบัติใหม่ด้วยแอตทริบิวต์ "readonly" ได้แล้ว การแทนที่คุณสมบัติ readonly จะทำได้เฉพาะในฟังก์ชัน "__clone" เท่านั้น: readonly class 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 = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // เคยเป็นอาร์เรย์ (-5 => 'a', 0 => 'b') // กลายมาเป็นอาร์เรย์ (-5 => 'a', -4 => 'b')
  • เพิ่มความสามารถในการสร้างคลาสที่ไม่ระบุชื่อในโหมดอ่านอย่างเดียว: $class = new readonly class { 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 คุณต้องเรียก constant(Foo::class . '::' . $name); // ตอนนี้คุณเพียงแค่ต้องระบุ Foo::{$name};
  • เพิ่มการสร้างข้อยกเว้นแบบแยกกัน (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) ในกรณีที่มีปัญหาเกิดขึ้นในการดำเนินการที่มีวันที่และเวลา
  • ปรับปรุงการจัดการข้อผิดพลาดที่เกิดขึ้นระหว่างการแยกวิเคราะห์ข้อมูลแบบอนุกรมในฟังก์ชัน unserialize() หากเกิดปัญหาขึ้น ฟังก์ชัน unserialize() จะส่งกลับรหัส E_WARNING แทน E_NOTICE
  • มีการเปลี่ยนแปลงฟังก์ชัน range() ขณะนี้เกิดข้อยกเว้นเมื่อพยายามส่งผ่านอ็อบเจ็กต์ ทรัพยากร หรืออาร์เรย์ในตัวแปรที่กำหนดขอบเขตของช่วง รวมถึงเมื่อระบุค่าลบในพารามิเตอร์ $step หรือค่าที่ไม่ได้กำหนดในพารามิเตอร์ใดๆ รายการอักขระจะถูกส่งออกเมื่อระบุสตริงแทนตัวเลข (เช่น "range('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
  • อนุญาตให้สร้าง closure จากวิธีการและส่งอาร์กิวเมนต์ที่มีชื่อไปยัง closure เหล่านี้ $test = new Test(); $closure = $test->magic(…); $closure(a: 'hello', b: 'world');
  • การเปลี่ยนแปลงพฤติกรรมเมื่อจัดการการมองเห็นค่าคงที่ในอินเทอร์เฟซ อินเทอร์เฟซ I { public const FOO = 'foo'; } class C implements 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

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster