PHP 8.4 ออกแล้ว
(php.net)- รวม property hooks, asymmetric visibility, DOM API ที่อัปเดตแล้ว, การปรับปรุงประสิทธิภาพ, การแก้บั๊ก และการปรับปรุงทั่วไป
- มี property hooks สำหรับรองรับ computed properties ที่ IDE และเครื่องมือ static analysis สามารถเข้าใจได้โดยตรง
- เพิ่ม asymmetric visibility ที่ทำให้ควบคุมขอบเขตการอ่านและการเขียนของพร็อพเพอร์ตีได้อย่างอิสระ
- ฟีเจอร์ใหม่
- สามารถใช้กลไก deprecation ที่มีอยู่ของ PHP กับฟังก์ชัน เมธอด และคลาสคอนสแตนต์ที่ผู้ใช้กำหนดเองได้ผ่านแอตทริบิวต์
#[\\Deprecated] - DOM API ใหม่รองรับการปฏิบัติตามมาตรฐานสำหรับการพาร์เซเอกสาร HTML5 และแก้ไขบั๊กความเข้ากันได้เก่าหลายจุดของ DOM
- ใช้อ็อบเจ็กต์
BcMath\\Numberเพื่อจัดการตัวเลขความแม่นยำตามต้องการในรูปแบบเชิงวัตถุได้ - มีฟังก์ชันอาร์เรย์ใหม่ เช่น
array_find(),array_find_key(),array_any(),array_all() - มีซับคลาสใหม่ของ PDO ได้แก่ Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, Pdo\Sqlite
- เข้าถึงพร็อพเพอร์ตีและเมธอดของอ็อบเจ็กต์ที่เพิ่งสร้างใหม่ได้โดยไม่ต้องใส่วงเล็บ
- สามารถใช้กลไก deprecation ที่มีอยู่ของ PHP กับฟังก์ชัน เมธอด และคลาสคอนสแตนต์ที่ผู้ใช้กำหนดเองได้ผ่านแอตทริบิวต์
- คลาส อินเทอร์เฟซ และฟังก์ชันใหม่
- มี Lazy Objects ใหม่ และการใช้งาน JIT ที่อิงกับ IR Framework
- เพิ่มฟังก์ชัน
request_parse_body(),bcceil(),bcdivmod(),bcfloor(),bcround() - เพิ่มเมธอด เช่น
DateTime::createFromTimestamp(),DateTime::getMicrosecond(),DateTime::setMicrosecond() - เพิ่มฟังก์ชัน
mb_trim(),mb_ltrim(),mb_rtrim(),mb_ucfirst(),mb_lcfirst() - เพิ่มฟังก์ชัน
pcntl_getcpu(),pcntl_getcpuaffinity(),pcntl_getqos_class(),pcntl_setns(),pcntl_waitid() - เพิ่มเมธอด
ReflectionClassConstant::isDeprecated(),ReflectionGenerator::isClosed(),ReflectionProperty::isDynamic() - เพิ่มฟังก์ชัน
http_get_last_response_headers(),http_clear_last_response_headers(),fpow() - เพิ่มเมธอด
XMLReader::fromStream(),XMLReader::fromUri(),XMLReader::fromString(),XMLWriter::toStream(),XMLWriter::toUri(),XMLWriter::toMemory() - เพิ่มฟังก์ชัน
grapheme_str_split()
- การเลิกใช้และความเข้ากันไม่ได้แบบ breaking change
- ส่วนขยาย IMAP, OCI8, PDO_OCI, pspell ถูกถอดออกจาก bundle และย้ายไปที่ PECL
- เลิกใช้พารามิเตอร์ชนิด nullable แบบ implicit
- เลิกใช้การใช้ _ เป็นชื่อคลาส
- เลิกใช้การยก 0 เป็นกำลังลบ
- หากส่งโหมดที่ไม่ถูกต้องให้
round()จะเกิด ValueError - ตอนนี้คลาสคอนสแตนต์ของส่วนขยายมีการกำหนด type แล้ว
- ตอนนี้คลาส GMP ถูกกำหนดเป็น final
- คอนสแตนต์และฟังก์ชันที่เกี่ยวข้องกับ MYSQLI ถูกเลิกใช้
- ตอนนี้
stream_bucket_make_writeable()และstream_bucket_new()จะคืนค่าเป็นอินสแตนซ์ของ StreamBucket - มีการเปลี่ยนพฤติกรรมของ
exit() - คอนสแตนต์ E_STRICT ถูกเลิกใช้
- การปรับปรุงประสิทธิภาพและไวยากรณ์
- ปรับปรุงประสิทธิภาพ ไวยากรณ์ และความปลอดภัยของชนิดข้อมูล
- แนะนำให้อัปเกรดเป็น PHP 8.4
3 ความคิดเห็น
เป็นภาษาที่อย่างน้อยก็คงไม่ถึงกับอดตาย เพราะมี WordPress และ Laravel
เป็นภาษาที่ต่อให้ WordPress กับ Laravel ล่มสลายไป ก็ยังไม่ถึงกับอดตายครับ
ความคิดเห็นจาก Hacker News
มีการระบุไว้ใน RFC ว่าทำไม `$this->countryCode`` ถึงไม่ก่อให้เกิดการเรียกซ้ำไม่สิ้นสุด รู้สึกราวกับเป็นเวทมนตร์ที่การเข้าถึงพร็อพเพอร์ตีของ PHP สามารถมีความหมายต่างกันได้ตามบริบท
ในฐานะโปรแกรมเมอร์ PHP รู้สึกกังวลกับทิศทางของ PHP ฟีเจอร์ภาษาใหม่ ๆ เพิ่มความซับซ้อนของภาษาเพื่อประโยชน์ที่น่าสงสัย
รู้สึกดีใจที่ PHP ยังคงเติบโตได้ดี ในปี 2021 เคยกังวลจากการจากไปของ Nikita Popov แต่ PHP ก็ยังเป็นภาษาที่ดีและยังมีนักพัฒนาจำนวนมากทำงานอยู่
ตื่นเต้นกับ property hooks มากที่สุด เป็นฟีเจอร์ที่คิดถึงจาก C#
__get()และ__set()แต่แนวทางนี้หนักเกินไปและต้องใช้คอมเมนต์ PHPDoc จำนวนมากกำลังดูการโอเวอร์โหลดตัวเข้าถึงอาร์เรย์แล้วไปเจอ "Property Hooks" รู้แล้วตกใจว่าเป็นฟีเจอร์ที่เพิ่งเพิ่มมาไม่นานนี้
พอใจกับรีลีสใหม่ของ PHP มีการปรับปรุงหลายอย่าง เช่น stack trace ของ closure ที่ดีขึ้น การปรับปรุงประสิทธิภาพ การรองรับ HTML5 และ lazy objects
ตื่นเต้นกับอ็อบเจ็กต์ bcmath ชอบที่ตอนนี้สามารถตรวจสอบชนิดข้อมูลได้โดยไม่ต้องใช้คลาส wrapper มากกว่าจะสนใจตัวดำเนินการเลขคณิต
ดีใจที่ PHP ยังคงพัฒนาต่อไป ทำให้นึกถึงความทรงจำตอนเริ่มต้นเป็นฟรีแลนซ์
ฟังก์ชันใหม่
array_findของ PHP แสดงให้เห็นปัญหาในการออกแบบภาษา แม้จะคล้ายกับarray_searchที่มีอยู่เดิม แต่อาร์กิวเมนต์กลับเรียงคนละลำดับไม่เข้าใจ
public private(set)รู้สึกว่าreadonly publicน่าจะเหมาะสมกว่าprivate(set)ของ Swift