หลังจากหนึ่งปีของการพัฒนา การเปิดตัวภาษาโปรแกรม - สาขาใหม่ประกอบด้วยชุดคุณสมบัติใหม่ เช่นเดียวกับการเปลี่ยนแปลงหลายประการที่ทำให้ความเข้ากันได้ลดลง
สำคัญ ใน PHP 7.4:
- - คุณสมบัติคลาสสามารถรวมการประกาศประเภทได้ เช่น:
ผู้ใช้คลาส {
สาธารณะ int $id;
สตริงสาธารณะ $name;
} - ไวยากรณ์สำหรับการกำหนดฟังก์ชัน “fn(parameter_list) => expr” พร้อมขอบเขตที่เชื่อมโยงตามค่า ตัวอย่างเช่น “fn($x) => $x + $y” คล้ายคลึงกับ “$fn2 = function ($x) use ($y) {return $x + $y;}”);
- "??=" ซึ่งสามารถใช้เพื่อกำหนดค่าเริ่มต้นได้ ("a ??= b" คล้ายกับ "a = a ?? b" หากกำหนด "a" ค่าของมันจะถูกเก็บไว้ และหากไม่ได้กำหนดไว้ ได้รับการกำหนดค่า "b" );
- ถูก จำกัด รักษาลำดับชั้นการสืบทอดของประเภทในประเภทการส่งคืนที่ได้รับหรือความสามารถในการกลับลำดับชั้นของประเภทดั้งเดิมในประเภทอาร์กิวเมนต์ที่ได้รับ ( ประเภทการส่งคืนและความขัดแย้งประเภทอาร์กิวเมนต์) โครงสร้างต่อไปนี้สามารถใช้ได้ใน PHP แล้ว:
คลาส ก {}
คลาส B ขยาย A {}ผู้ผลิตคลาส {
วิธีการฟังก์ชั่นสาธารณะ (): A {}
}
คลาส ChildProducer ขยายผู้ผลิต {
วิธีการฟังก์ชั่นสาธารณะ (): B {}
} - การเปิดโอเปอเรเตอร์ภายในอาร์เรย์ “…$var” ดำเนินการทดแทนอาร์เรย์ที่มีอยู่เมื่อกำหนดอาร์เรย์ใหม่
$parts = ['แอปเปิ้ล', 'ลูกแพร์'];
$fruits = ['กล้วย', 'ส้ม', …$parts, 'แตงโม'];
// ['กล้วย', 'ส้ม', 'แอปเปิ้ล', 'ลูกแพร์', 'แตงโม']; - การแสดงตัวเลขจำนวนมากด้วยตัวคั่นด้วยตัวอักษรตัวเลข (1_000_000_00)
- สนับสนุน ซึ่งอนุญาตให้คุณคงการอ้างอิงไปยังอ็อบเจ็กต์ได้ แต่อย่าบล็อกตัวรวบรวมขยะจากการลบอ็อบเจ็กต์ที่เกี่ยวข้อง
- ใหม่ การทำให้เป็นอนุกรมของวัตถุ (การรวมกันของ Serializable และ __sleep()/__wakeup()) ซึ่งแทนที่อินเทอร์เฟซ Serializable ซึ่งจะเลิกใช้แล้ว
// ส่งคืนอาร์เรย์ที่มีสถานะทั้งหมดของวัตถุ
ฟังก์ชั่นสาธารณะ __ซีเรียลไลซ์ (): อาร์เรย์;// คืนค่าสถานะของวัตถุจากอาร์เรย์
ฟังก์ชั่นสาธารณะ __unserialize (อาร์เรย์ $ data): เป็นโมฆะ; - ได้รับอนุญาตให้โยนข้อยกเว้นจากวิธีการ ;
- เพิ่มการสนับสนุนสำหรับการโหลดแคชโค้ดออบเจ็กต์ล่วงหน้า เพิ่มพารามิเตอร์สำหรับการตั้งค่า
ซึ่งคุณสามารถระบุสคริปต์ PHP ที่จะคอมไพล์และรันเมื่อเซิร์ฟเวอร์เริ่มทำงาน สคริปต์นี้สามารถโหลด opcode ของไฟล์อื่น ๆ ผ่านการรวมโดยตรงหรือใช้ฟังก์ชัน opcache_compile_file() - เพิ่มฟังก์ชัน crc32c ให้กับส่วนขยาย Hash เพื่อคำนวณเช็คซัมโดยใช้พหุนาม Castagnoli
- เพิ่มการรองรับฟังก์ชัน password_hash() สำหรับวิธีการแฮชรหัสผ่าน argon2i และ argin2id ในการใช้งานไลบรารี Sodium หาก PHP ถูกสร้างขึ้นโดยไม่มี libargon
- เพิ่มฟังก์ชัน mb_str_split() คล้ายกับ str_split() แต่ไม่ได้ดำเนินการด้วยไบต์ แต่มีตำแหน่งอักขระในสตริงแบบหลายไบต์
- ขณะนี้ฟังก์ชัน strip_tags() สามารถส่งผ่านอาร์เรย์ที่มีชื่อแท็กได้ เช่น แทนที่จะเป็น strip_tags($str, ' ') คุณสามารถระบุ strip_tags($str, ['a', 'p']);
- proc_open() อนุญาตให้ตัวถูกดำเนินการแสดงรายการในอาร์เรย์ แทนที่จะเรียกใช้สตริง และยังให้การเปลี่ยนเส้นทางเธรดและการสนับสนุนสำหรับตัวอธิบายไฟล์ null
proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);
// ชอบ 2>&1 ในเชลล์
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);// เช่น 2>/dev/null หรือ 2>nul ในเชลล์
proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes); - ส่วนขยาย Firebird/Interbase, Recode และ WDDX ไม่รวมอยู่ในการกระจายพื้นฐาน ขณะนี้ส่วนขยายเหล่านี้ได้รับการเผยแพร่ผ่าน PECL;
- โอนเข้าหมวดแล้ว คุณลักษณะต่างๆ เช่น ตัวดำเนินการแบบไตรภาคที่ซ้อนกันโดยไม่มีวงเล็บ การเข้าถึงองค์ประกอบอาเรย์และสตริงโดยใช้เครื่องหมายปีกกา (“$var{$idx}”) ฟังก์ชัน is_real() และการส่งไปสู่ความเป็นจริง การใช้คีย์เวิร์ดหลักโดยไม่มีคลาสพาเรนต์ พารามิเตอร์ Allow_url_include การกำหนดค่า โดยใช้ array_key_exists() กับวัตถุ
ฟังก์ชัน get_magic_quotes_gpc(), get_magic_quotes_runtime() และ
hebrevc(), Convert_cyr_string(), money_format(), ezmlm_hash(), Restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString()มีการจัดเตรียมคำเตือนเกี่ยวกับการใช้คุณลักษณะที่ล้าสมัยเมื่อพยายามประมวลผลสัญลักษณ์ที่ไม่ถูกต้องในฟังก์ชัน
base_convert(), bindec(), octdec() และ hexdec() และเมื่อระบุรูปแบบที่ไม่ใช่สตริงใน mb_ereg_replace()
ที่มา: opennet.ru
