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

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

สำคัญ การปรับปรุง ใน 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): เป็นโมฆะ;

  • ได้รับอนุญาตให้โยนข้อยกเว้นจากวิธีการ __toString();
  • เพิ่มการสนับสนุนสำหรับการโหลดแคชโค้ดออบเจ็กต์ล่วงหน้า เพิ่มพารามิเตอร์สำหรับการตั้งค่า
    opcache.โหลดล่วงหน้าซึ่งคุณสามารถระบุสคริปต์ 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

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