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

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

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

  • ในระหว่างการโคลนคลาส คุณสามารถเริ่มต้นคุณสมบัติใหม่ได้ด้วยแอตทริบิวต์ "อ่านอย่างเดียว" การแทนที่คุณสมบัติแบบอ่านอย่างเดียวนั้นได้รับอนุญาตเฉพาะภายในฟังก์ชัน “__clone” เท่านั้น: คลาสแบบอ่านอย่างเดียว โพสต์ { 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[-5] = 'a'; $อาร์เรย์[] = 'ข'; var_export($อาร์เรย์); // เป็นอาร์เรย์ (-5 => 'a', 0 => 'b') // กลายเป็นอาร์เรย์ (-5 => 'a', -4 => 'b')
  • เพิ่มความสามารถในการสร้างคลาสที่ไม่ระบุชื่อในโหมดอ่านอย่างเดียว: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • เพิ่มฟังก์ชัน json_validate() เพื่อตรวจสอบอย่างรวดเร็วว่าสตริงอยู่ในรูปแบบ JSON โดยไม่ต้องทำการถอดรหัสหรือไม่ json_validate(สตริง $json, int $deep = 512, int $flags = 0): บูล
  • มีการเพิ่มวิธีการใหม่ในคลาส Randomizer ซึ่งมี API ระดับสูงสำหรับการสร้างตัวเลขและลำดับแบบสุ่มหลอก: getBytesFromString สำหรับการสร้างสตริงที่มีขนาดที่กำหนด โดยใช้ลำดับอักขระแบบสุ่มที่มีอยู่ในสตริงอื่น getFloat และ nextFloat เพื่อสร้างตัวเลขทศนิยมแบบสุ่มที่อยู่ในช่วงที่ระบุ
  • เพิ่มความสามารถในการดึงค่าคงที่โดยใช้ไวยากรณ์คลาสแบบไดนามิก: class Foo { const BAR = 'bar'; } $ชื่อ = 'บาร์'; // ก่อนหน้านี้ หากต้องการดึงค่าคงที่ BAR คุณต้องเรียกค่าคงที่ (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
  • ช่วยให้คุณสร้างการปิดจากวิธีการและส่งผ่านอาร์กิวเมนต์ที่มีชื่อไปยังการปิดเหล่านั้น $test = การทดสอบใหม่(); $closure = $test->magic(...); $closure(a: 'สวัสดี', b: 'โลก');
  • พฤติกรรมที่เปลี่ยนไปเมื่อจัดการการมองเห็นค่าคงที่ในอินเทอร์เฟซ อินเทอร์เฟซ I { public const FOO = 'foo'; } คลาส C ใช้งาน I { 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

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