หนึ่งในเหตุการณ์ที่น่าตื่นเต้นที่สุดในโลก PHP ในปี 2015 คือการเปิดตัว PHP 7; 10 ปีหลังจากการเปิดตัวเวอร์ชันหลักล่าสุด PHP 5 ด้วยการก้าวไปข้างหน้า PHP 7 ได้นำเสนอคุณสมบัติและการอัปเดตประสิทธิภาพใหม่ ๆ มากมาย .
อย่างไรก็ตามมันยังลบฟังก์ชันเก่าที่ล้าสมัยซึ่งทำให้เกิดช่องว่างความเข้ากันได้บางอย่างทำให้แอปพลิเคชันรุ่นเก่าย้ายไปยังเวอร์ชันใหม่ได้ยากขึ้น คู่มือนี้ควรใช้เป็นบทแนะนำสั้น ๆ เกี่ยวกับสิ่งที่จะเกิดขึ้นหากคุณวางแผนที่จะย้ายแอปพลิเคชันที่มีอยู่ของคุณหรือสร้างแอปพลิเคชันใหม่ที่อยู่เหนือ PHP 7
หากคุณไม่ได้ทำงานกับ PHP เมื่อเร็ว ๆ นี้คุณอาจสงสัยว่าเกิดอะไรขึ้นกับ PHP 6 ทำไมถึงกระโดดจาก PHP 5 เป็น PHP 7? เรื่องสั้นสั้น ๆ PHP 6 ก็ล้มเหลว คุณสมบัติหลักของเวอร์ชัน 6 คือการรองรับอักขระดั้งเดิม Unicode เนื่องจาก PHP ส่วนใหญ่ใช้ในการพัฒนาเว็บและเว็บต้องการ Unicode ดังนั้นการย้ายเพื่อนำ Unicode ไปสู่ PHP จึงมีความหมาย
แนวคิดคือนำการสนับสนุน Unicode แบบเต็มไปยังเคอร์เนลเอง มันจะนำความสามารถเพิ่มเติมมาสู่ภาษา: จากความสามารถในการใช้งาน อิโมจิ เป็นใบ้เช่นชื่อตัวแปรและฟังก์ชันไปจนถึงฟังก์ชันสตริงสากลที่มีประสิทธิภาพ ตัวอย่างเช่นเมื่อภาษาอื่นใช้อักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กต่างจากภาษาอังกฤษหรือเมื่อต้องแปลงชื่อเป็นอักขระภาษาจีนเป็นภาษาอังกฤษ
น่าเสียดายที่แผนทะเยอทะยานนี้กลายเป็นปัญหาใหญ่กว่าที่คาดการณ์ไว้ ฐานรหัสส่วนใหญ่ต้องได้รับการพอร์ตเพื่อรองรับ Unicode สำหรับทั้งส่วนขยายหลักและส่วนขยายหลักซึ่งน่าเบื่อและซับซ้อน สิ่งนี้ทำให้การพัฒนาคุณลักษณะอื่น ๆ ในภาษาช้าลงทำให้หลายคนไม่พอใจ นักพัฒนา PHP ในกระบวนการ. มีการนำเสนออุปสรรคเพิ่มเติมส่งผลให้มีความสนใจน้อยลงในการพัฒนาการสนับสนุน Unicode ดั้งเดิมซึ่งนำไปสู่การละทิ้งโครงการในที่สุด
เนื่องจากทรัพยากรเช่นหนังสือและบทความได้ถูกเขียนขึ้นสำหรับ PHP 6 และการสนับสนุน Unicode เวอร์ชันใหม่จะเปลี่ยนชื่อเป็น PHP 7 เพื่อหลีกเลี่ยงความสับสน
อย่างไรก็ตามความทุกข์ทรมานจากอดีตที่น่าเศร้าก็เพียงพอแล้วเรามาดูกันว่า PHP 7 นำมาสู่งานปาร์ตี้อย่างไร
ด้วยการอัปเดตเกือบทั้งหมดคาดว่าจะมีการปรับปรุงประสิทธิภาพเล็กน้อย อย่างไรก็ตามคราวนี้ PHP นำการปรับปรุงที่สำคัญกว่าเวอร์ชันก่อนหน้าซึ่งทำให้ประสิทธิภาพที่แท้จริงเป็นหนึ่งในคุณสมบัติที่น่าสนใจที่สุดของ PHP 7 ซึ่งเป็นส่วนหนึ่งของโครงการ“ PHPNG” ซึ่งกล่าวถึงส่วนประกอบภายในของเครื่องยนต์ Zend
ด้วยการปรับโครงสร้างข้อมูลภายในใหม่และเพิ่มขั้นตอนกลางในการเขียนโค้ดการคอมไพล์ในรูปแบบของ Abstract Syntax Tree (AST) ผลลัพธ์ที่ได้คือประสิทธิภาพที่เหนือกว่าและการจัดสรรหน่วยความจำที่มีประสิทธิภาพมากขึ้น ตัวเลขนั้นดูมีแนวโน้มมาก เกณฑ์มาตรฐาน ในแอปพลิเคชันในโลกแห่งความเป็นจริงแสดงให้เห็นว่า PHP 7 เร็วกว่า PHP 5.6 โดยเฉลี่ยถึงสองเท่าและส่งผลให้ใช้หน่วยความจำน้อยลง 50% ในระหว่างการร้องขอทำให้ PHP 7 เป็นคู่แข่งที่แข็งแกร่งของคอมไพเลอร์ HHVM JIT ของ Facebook ดูอินโฟกราฟิกของ Zend ที่แสดงให้เห็นถึงประสิทธิภาพของสิ่งที่พบบ่อย กรอบ CMS y .
การใช้หน่วยความจำที่ลดลงยังช่วยให้เครื่องขนาดเล็กสามารถจัดการคำขอได้ดีขึ้นพร้อมกับโอกาสในการสร้างไมโครเซอร์วิสรอบ ๆ PHP การเปลี่ยนแปลงภายในโดยเฉพาะอย่างยิ่งการใช้งาน AST ยังเปิดโอกาสสำหรับการเพิ่มประสิทธิภาพในอนาคตที่สามารถผลักดันประสิทธิภาพให้ดียิ่งขึ้นไปอีก กำลังพิจารณาการนำคอมไพเลอร์ JIT ไปใช้งานภายในใหม่สำหรับเวอร์ชันในอนาคต
PHP 7 มาพร้อมกับคุณสมบัติทางไวยากรณ์ใหม่ แม้ว่าจะไม่ได้ขยายขีดความสามารถของภาษา แต่ก็มีวิธีที่ดีกว่าหรือง่ายกว่าในการทำให้โค้ดของคุณน่าเขียนและสบายตายิ่งขึ้น
ตอนนี้เราสามารถจัดกลุ่มการประกาศการนำเข้าสำหรับคลาสที่มาจากเนมสเปซเดียวกันในบรรทัด 'ใช้' สิ่งนี้จะช่วยในการจัดแนวการประกาศให้มีความหมายหรือบันทึกเพียงไม่กี่ไบต์ในไฟล์ของคุณ
use FrameworkModuleFoo; use FrameworkModuleBar; use FrameworkModuleBaz;
ด้วย PHP 7 เราสามารถใช้:
use FrameworkModule{Foo, Bar, Baz};
หรือถ้าเราชอบแบบหลายเส้น:
use FrameworkModule{ Foo, Bar, Baz };
สิ่งนี้ช่วยแก้ปัญหาทั่วไปในการเขียนโปรแกรม PHP โดยที่เราต้องการกำหนดค่าให้กับตัวแปรของตัวแปรอื่นหากตั้งค่าหลังไว้จริงๆ มิฉะนั้นจะให้ค่าที่แตกต่างจากนี้ มักใช้เมื่อทำงานกับอินพุตที่ผู้ใช้ให้มา
ก่อน PHP 7:
if (isset($foo)) { $bar = $foo; } else { $bar = 'default'; // we would give $bar the value 'default' if $foo is NULL }
หลังจาก PHP 7:
$bar = $foo ?? 'default';
นอกจากนี้ยังสามารถผูกมัดกับตัวแปรต่างๆได้:
$bar = $foo ?? $baz ?? 'default';
ตัวดำเนินการยานอวกาศอนุญาตให้มีการเปรียบเทียบสามทางระหว่างค่าสองค่าไม่เพียง แต่ระบุว่าค่าเท่ากัน แต่ยังมีค่ามากกว่าด้วยการส่งกลับ 1.0 หรือ -1
ที่นี่เราสามารถดำเนินการต่างๆได้ขึ้นอยู่กับความแตกต่างของค่า:
switch ($bar $foo) { case 0: echo '$bar and $foo are equal'; case -1: echo '$foo is bigger'; case 1: echo '$bar is bigger'; }
ค่าที่เปรียบเทียบอาจเป็นจำนวนเต็มลอยสตริงหรือแม้แต่อาร์เรย์ ดูเอกสารประกอบเพื่อให้ทราบว่าค่าต่างๆเปรียบเทียบกันอย่างไร
แต่แน่นอนว่า PHP 7 ยังนำเสนอฟังก์ชันใหม่ที่น่าตื่นเต้น
PHP 7 ขยายการประกาศพารามิเตอร์ประเภทก่อนหน้าในเมธอด (คลาสอินเทอร์เฟซและอาร์เรย์) โดยการเพิ่มสเกลาร์สี่ประเภท จำนวนเต็ม (int
), ลอย ( float
), บูลีน (bool
) และ สตริง ( string
) เป็นประเภทพารามิเตอร์ที่เป็นไปได้
นอกจากนี้เรายังสามารถระบุประเภทของวิธีการและฟังก์ชันที่พวกเขาส่งคืนได้ ประเภทที่รองรับ ได้แก่ * bool *, * int *, * float *, * string *, * array *, * callable *, * Class * หรือ * Interface * name, * self * และ * parent * (สำหรับเมธอดคลาส)
Clase Calculadora { // Declaramos que los parámetros proporcionados son del tipo entero Función Pública addTwoInts (int $ x, int $ y): int { Retorno $ x + $ y; // También decimos explícitamente que este método devolverá un entero } }
การประกาศประเภทช่วยให้สร้างแอปพลิเคชันที่มีประสิทธิภาพมากขึ้นและหลีกเลี่ยงการส่งผ่านและส่งคืนค่าที่ไม่ถูกต้องจากฟังก์ชัน ประโยชน์อื่น ๆ ได้แก่ ตัวแยกวิเคราะห์รหัสแบบคงที่และ IDE ซึ่งให้มุมมองที่ดีขึ้นของฐานรหัสหากไฟล์ DocBlocks
เนื่องจาก PHP เป็นภาษาในการพิมพ์ที่อ่อนแอค่าบางอย่างสำหรับพารามิเตอร์และประเภทการส่งคืนจะถูกส่งออกตามบริบท หากเราส่งค่า '3' ในฟังก์ชันที่มีการประกาศพารามิเตอร์เป็นประเภท int
ล่ามจะยอมรับเป็นจำนวนเต็มและจะไม่ส่งข้อผิดพลาด หากคุณไม่ต้องการสิ่งนี้คุณสามารถเปิดใช้งาน modo estricto
เพิ่มคำสั่งของ declarar
Declarar (tipos_estrictos = 1);
สิ่งนี้ถูกตั้งค่าเป็นรายไฟล์เนื่องจากตัวเลือกส่วนกลางจะแบ่งที่เก็บโค้ดออกเป็นที่เก็บโค้ดที่สร้างขึ้นด้วยความเข้มงวดระดับโลก ใน และสิ่งที่ไม่ได้ส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิดเมื่อเรารวมโค้ดจากทั้งสองอย่างเข้าด้วยกัน
ด้วยการเพิ่มข้อยกเว้นของเครื่องยนต์ข้อผิดพลาดร้ายแรงที่อาจส่งผลให้การสิ้นสุดของ สคริปต์ สามารถจับและจัดการได้ง่าย
ข้อผิดพลาดเช่นการเรียกใช้เมธอดที่ไม่มีอยู่จริงจะไม่ยุติสคริปต์ แต่จะทำให้เกิดข้อยกเว้นที่สามารถจัดการได้โดยบล็อกทดสอบการจับซึ่งช่วยปรับปรุงการจัดการข้อผิดพลาดสำหรับแอปพลิเคชันของคุณ สิ่งนี้สำคัญสำหรับแอปพลิเคชันเซิร์ฟเวอร์และบางประเภท Daemons เนื่องจากข้อผิดพลาดร้ายแรงจำเป็นต้องรีบูต การทดสอบใน PHPUnit น่าจะมีประโยชน์มากกว่าเช่นกันเนื่องจากข้อผิดพลาดร้ายแรงจะลบล้างชุดทดสอบทั้งหมด ข้อยกเว้นแทนที่จะเป็นข้อผิดพลาดจะได้รับการจัดการโดยกรณีทดสอบ
PHP 7 เพิ่มคลาสข้อยกเว้นใหม่จำนวนหนึ่งตามประเภทของข้อผิดพลาดที่สามารถพบได้ เพื่อรักษาความเข้ากันได้ระหว่างเวอร์ชันอินเทอร์เฟซใหม่ Throwable
ซึ่งสามารถใช้งานได้จากข้อยกเว้นของเครื่องยนต์และผู้ใช้ สิ่งนี้จำเป็นเพื่อหลีกเลี่ยงข้อยกเว้นของเครื่องยนต์เพื่อขยายคลาสข้อยกเว้นพื้นฐานซึ่งส่งผลให้เกิดข้อยกเว้นการดักจับโค้ดแบบเก่าที่ไม่มีมาก่อน
ก่อน PHP 7 สิ่งนี้จะยุติสคริปต์ด้วยข้อผิดพลาดร้ายแรง:
try { thisFunctionDoesNotEvenExist(); } catch (EngineException $e) { // Clean things up and log error echo $e->getMessage(); }
คลาสที่ไม่ระบุชื่อเป็นลูกพี่ลูกน้องของฟังก์ชันที่ไม่ระบุตัวตนที่คุณสามารถใช้ได้ในอินสแตนซ์ง่ายๆระยะสั้น คลาสที่ไม่ระบุชื่อสามารถสร้างและใช้งานได้ง่ายเหมือนกับอ็อบเจ็กต์ทั่วไป นี่คือตัวอย่างจากเอกสาร
ก่อน PHP 7
php class MyLogger { public function log($msg) { print_r($msg . '
'); } } $pusher->setLogger( new MyLogger() );
ด้วยคลาสที่ไม่ระบุชื่อ:
php $pusher->setLogger(new class { public function log($msg) { print_r($msg . '
'); } });
คลาสที่ไม่ระบุตัวตนมีประโยชน์ในการทดสอบหน่วยโดยเฉพาะอย่างยิ่งในการทดสอบวัตถุและบริการ สิ่งนี้ช่วยให้เราหลีกเลี่ยงไลบรารีและเฟรมเวิร์กจำนวนมากที่จำลองการสร้างอ็อบเจ็กต์ง่ายๆที่ให้อินเทอร์เฟซที่เราต้องการเลียนแบบ
เพิ่มฟังก์ชันใหม่สองฟังก์ชันเพื่อสร้างจำนวนเต็มและสตริงที่มีการเข้ารหัสลับ
random_bytes(int $len);
ส่งคืนสตริงสุ่มที่มีความยาว $len
php random_int(int $min, int $max);
ส่งคืนตัวเลขระหว่าง $min
และ $max
ซึ่งแตกต่างจากภาษาอื่น ๆ ก่อน PHP 7 PHP ไม่มีวิธีหลีกเลี่ยงรหัส Unicode ในตัวอักษรสตริง ฟังก์ชันนี้จะเพิ่มลำดับการหลีกเลี่ยง `` u 'เพื่อสร้างอักขระเหล่านั้นโดยใช้โค้ดโค้ด UTF-8 ของคุณ สิ่งนี้ดีกว่าการแทรกอักขระโดยตรงทำให้สามารถจัดการอักขระที่มองไม่เห็นได้ดีขึ้นรวมถึงอักขระที่มีการแสดงกราฟิกเหมือนกัน แต่มีความหมายแตกต่างกัน
echo 'u{1F602}'; // outputs ‚
โปรดทราบว่าสิ่งนี้จะทำลายรหัสที่มีอยู่ด้วยลำดับ ` u 'เนื่องจากจะเปลี่ยนพฤติกรรม
เครื่องกำเนิดไฟฟ้าใน PHP มีคุณสมบัติพิเศษที่ดีเช่นกัน ขณะนี้เครื่องกำเนิดไฟฟ้ามีคำสั่งส่งคืนที่สามารถใช้เพื่อให้สร้างค่าสุดท้ายหลังจากการทำซ้ำ สิ่งนี้สามารถใช้เพื่อตรวจสอบว่าเครื่องกำเนิดไฟฟ้าทำงานโดยไม่มีข้อผิดพลาดและอนุญาตให้รหัสที่เรียกเครื่องกำเนิดไฟฟ้าจัดการสถานการณ์ต่างๆได้อย่างเหมาะสม
นอกจากนี้เครื่องกำเนิดไฟฟ้ายังสามารถส่งคืนและแสดงนิพจน์จากเครื่องกำเนิดไฟฟ้าอื่น ๆ สิ่งนี้ช่วยให้สามารถแบ่งการดำเนินการที่ซับซ้อนออกเป็นหน่วยโมดูลาร์ที่ง่ายขึ้นและมากขึ้น
function genA() { yield 2; yield 3; yield 4; } function genB() { yield 1; yield from genA(); // 'genA' Se llama aquí e itera sobre yield 5; return 'success'; // Este es un resultado final que podemos comprobar más tarde } foreach (genB() as $val) { echo '
$val'; // Esto emitirá los valores 1 a 5 para} $genB()->getReturn(); // Esto debería devolver el 'éxito' cuando no hay errores.
ความคาดหวังคือการปรับปรุง afirmar ()
ในขณะที่รักษาความเข้ากันได้แบบย้อนหลัง อนุญาตให้มีการยืนยันแบบไม่มีต้นทุนในโค้ดการผลิตและให้ความสามารถในการโยนข้อยกเว้นที่กำหนดเองเมื่อการยืนยันล้มเหลวซึ่งจะเป็นประโยชน์ในระหว่างการพัฒนา
Afirmar ()
กลายเป็นโครงสร้างภาษาใน PHP 7 การยืนยันควรใช้เพื่อวัตถุประสงค์ในการดีบักในสภาพแวดล้อมการพัฒนาและทดสอบเท่านั้น ในการกำหนดค่าพฤติกรรมเรามีคำสั่งใหม่สองคำสั่ง
zend.afirmación
- 1
: สร้างและรันโค้ด (โหมดการพัฒนา) (ค่าเริ่มต้น) - 0
: สร้างโค้ด แต่ข้ามไปรอบ ๆ ที่รันไทม์ - -1
: อย่าสร้างโค้ดซึ่งทำให้ไม่มีค่าใช้จ่าย (โหมดการผลิต)afirmación.excepción
- 1
: โยนเมื่อการยืนยันล้มเหลวโยนวัตถุที่ให้ไว้เป็นข้อยกเว้นหรือโยนวัตถุ * ErrorAffirmation * ใหม่หากไม่มีการระบุข้อยกเว้น - 0
: ใช้หรือสร้าง * Throwable * ตามที่อธิบายไว้ ข้างต้น แต่จะสร้างคำเตือนตามวัตถุนั้นแทนที่จะโยนทิ้ง (เข้ากันได้กับพฤติกรรม PHP 5)การเปิดตัวรุ่นหลักเปิดโอกาสให้เปลี่ยนแปลง / อัปเดตฟังก์ชันเก่าหรือแม้กระทั่งลบออกหากถือว่าเก่าเกินไปหรือล้าสมัยไประยะหนึ่ง การเปลี่ยนแปลงดังกล่าวอาจทำให้เกิดการแบ่งความเข้ากันได้ในแอปพลิเคชันรุ่นเก่า
ปัญหาอีกประการหนึ่งที่เกิดขึ้นจากเวอร์ชันนี้คือไลบรารีและเฟรมเวิร์กที่สำคัญที่คุณต้องใช้อาจไม่ได้รับการอัปเดตเพื่อรองรับเวอร์ชันล่าสุด ทีม PHP ได้พยายามทำการเปลี่ยนแปลงใหม่ให้ช้าที่สุดเท่าที่จะเป็นไปได้และเพื่อให้การย้ายข้อมูลไปยังเวอร์ชันใหม่นั้นง่ายที่สุด แอปพลิเคชันที่ใหม่กว่าและได้รับการอัปเดตมากขึ้นควรพบว่าการย้ายไปยังเวอร์ชันใหม่ทำได้ง่ายขึ้นในขณะที่แอปพลิเคชันรุ่นเก่าอาจต้องตัดสินใจว่าสิทธิประโยชน์นั้นมีมากกว่าต้นทุนหรือไม่โดยอาจเลือกที่จะไม่อัปเกรด
การหยุดพักส่วนใหญ่เป็นเรื่องเล็กน้อยและสามารถบรรเทาได้ง่ายในขณะที่คนอื่นอาจต้องใช้ความพยายามและเวลามากกว่า โดยทั่วไปหากคุณมีคำเตือนค้างในแอปพลิเคชันก่อนติดตั้ง PHP 7 คุณอาจได้รับข้อผิดพลาดที่จะทำให้แอปพลิเคชันเสียหายจนกว่าจะได้รับการแก้ไข คุณถูกเตือนใช่มั้ย?
ที่สำคัญที่สุด SAPI เก่าและเลิกใช้แล้วถูกลบออกเป็นส่วนขยาย mysql
(แต่คุณไม่ควรใช้สิ่งนี้ตั้งแต่แรกใช่มั้ย?) สำหรับรายการส่วนขยายทั้งหมดและไฮไลต์ที่ถูกลบออกคุณสามารถตรวจสอบ RFCs นี้ได้ ที่นี่ ย ที่นี่ .
นอกจากนี้ SAPI อื่น ๆ จะถูกย้ายไปยัง PHP 7
การอัปเดตนี้ได้ทำการเปลี่ยนแปลงบางอย่างเพื่อให้สอดคล้องกับโครงสร้างตัวแปรตัวแปร สิ่งนี้ช่วยให้สามารถใช้นิพจน์ขั้นสูงที่มีตัวแปรได้มากขึ้น แต่จะแนะนำการเปลี่ยนแปลงพฤติกรรมในบางกรณีดังที่แสดงด้านล่าง
// old meaning // new meaning $$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz'] $foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz'] $foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']() Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
สิ่งนี้จะทำลายพฤติกรรมของแอปพลิเคชันที่เข้าถึงค่าเช่นนี้ ในทางกลับกันคุณสามารถทำสิ่งที่เรียบร้อยเช่นนี้:.
// Nested () foo()(); // Calls the return of foo() $foo->bar()(); // IIFE syntax like JavaScript (function() { // Function body })(); // Nested :: $foo::$bar::$baz
แท็กเปิด / ปิด `` ,
,
... `ถูกลบออกและใช้ไม่ได้อีกต่อไป การแทนที่ด้วยสิ่งที่ถูกต้องควรเป็นเรื่องง่าย แต่คุณจะทำอย่างไรกับพวกเขาแปลก ๆ ?
อันเป็นผลมาจากการเพิ่มเช่นคลาสประเภท return และพารามิเตอร์อินเทอร์เฟซและคุณสมบัติไม่สามารถมีชื่อต่อไปนี้ได้อีกต่อไป:
- บูล - int - ลอย - สตริง - null - จริง - เท็จ
สิ่งเหล่านี้ทำให้เกิดการหยุดพักแอปพลิเคชันที่มีอยู่และไลบรารีที่ใช้ แต่ควรแก้ไขได้ง่าย นอกจากนี้แม้ว่าจะไม่ก่อให้เกิดข้อผิดพลาดใด ๆ และถูกต้อง แต่ก็ไม่ควรใช้สิ่งต่อไปนี้เนื่องจากสงวนไว้สำหรับการใช้งานในอนาคต:
วัตถุ - ผสม - ตัวเลข
การละเว้นจากการใช้งานควรช่วยให้คุณไม่ต้องเสียเวลาเปลี่ยนใหม่ในอนาคต สำหรับรายการการเปลี่ยนแปลงทั้งหมดที่อาจทำลายความเข้ากันได้โปรดดูที่นี่ เอกสาร .
คุณยังสามารถใช้ php7cc ซึ่งจะตรวจสอบโค้ดของคุณและสามารถตรวจพบปัญหาที่อาจเกิดขึ้นหากคุณย้ายไปที่ PHP 7 แต่แน่นอนว่าไม่มีวิธีใดที่ดีไปกว่าการติดตั้ง PHP 7 และตรวจสอบด้วยตัวคุณเอง ## ปัญหาความเข้ากันได้ของ PHP ที่เป็นไปได้ ### ความเข้ากันได้ของโครงสร้างพื้นฐาน PHP 7
เส้นทางที่ผลิตภัณฑ์หรือบริการเข้าถึงลูกค้าเรียกว่า
บริการโฮสติ้งจำนวนมากเริ่มเพิ่มการรองรับ PHP 7 ซึ่งเป็นข่าวดีสำหรับผู้ให้บริการโฮสติ้งที่ใช้ร่วมกันเนื่องจากประสิทธิภาพที่เพิ่มขึ้นจะทำให้พวกเขาสามารถเพิ่มจำนวนเว็บไซต์ไคลเอนต์บนฮาร์ดแวร์ของพวกเขาลดค่าใช้จ่ายในการดำเนินงานและเพิ่มอัตรากำไรของคุณ สำหรับลูกค้าเองพวกเขาไม่ควรคาดหวังการเพิ่มมากเกินไปภายใต้เงื่อนไขเหล่านี้ แต่เพื่อความเป็นธรรมโฮสติ้งที่ใช้ร่วมกันไม่ใช่ตัวเลือกที่มุ่งเน้นประสิทธิภาพอยู่ดี
ในทางกลับกันบริการที่นำเสนอโดยเซิร์ฟเวอร์ส่วนตัวเสมือนหรือเซิร์ฟเวอร์เฉพาะจะได้รับประโยชน์อย่างเต็มที่จากประสิทธิภาพการทำงานนี้ บริการบางอย่างของ PaaS เช่น Heroku รองรับ PHP 7 ตั้งแต่เริ่มต้น แต่บริการอื่น ๆ เช่น AWS Beanstalk ย OpenShift de Oracle กำลังล้าหลัง ตรวจสอบเว็บไซต์ของผู้ให้บริการ PaaS ของคุณเพื่อดูว่ารองรับ PHP 7 แล้วหรือไม่หรือมีการสนับสนุนในอนาคตอันใกล้นี้หรือไม่ แน่นอนว่าผู้ให้บริการ IaaS ช่วยให้คุณสามารถควบคุมฮาร์ดแวร์และติดตั้ง PHP 7 (หรือคอมไพล์ได้ตามที่คุณต้องการ) แพ็คเกจ PHP 7 พร้อมใช้งานสำหรับสภาพแวดล้อม IaaS หลัก ๆ ทั้งหมดแล้ว
นอกเหนือจากความเข้ากันได้ของโครงสร้างพื้นฐานแล้วคุณควรระวังปัญหาความเข้ากันได้ของซอฟต์แวร์ที่อาจเกิดขึ้นด้วย ระบบจัดการเนื้อหายอดนิยมเช่น WordPress, Joomla และ Drupal ได้เพิ่มการรองรับ PHP 7 ด้วยเวอร์ชันล่าสุด เฟรมที่สำคัญเช่น Symfony และ Laravel ยังได้รับการสนับสนุนอย่างเต็มที่ อย่างไรก็ตามถึงเวลาแล้วที่ควรระมัดระวัง การสนับสนุนนี้ไม่ครอบคลุมถึงรหัสของบุคคลที่สามในรูปแบบของปลั๊กอินปลั๊กอินแพ็คเกจหรือสิ่งที่ CMS หรือกรอบงานเรียกใช้ พวกเขาอาจประสบปัญหาความเข้ากันได้และเป็นความรับผิดชอบของคุณที่จะต้องตรวจสอบให้แน่ใจว่าทุกอย่างพร้อมสำหรับ PHP 7
สำหรับที่เก็บที่ใช้งานอยู่และได้รับการดูแลไม่น่าจะเป็นปัญหา อย่างไรก็ตามที่เก็บข้อมูลเก่าที่ไม่ต้องบำรุงรักษาซึ่งขาดการรองรับ PHP 7 อาจทำให้แอปพลิเคชันทั้งหมดของคุณใช้งานไม่ได้
เวอร์ชัน PHP 7 ได้ลบโค้ดเก่าและล้าสมัยและปูทางไปสู่คุณสมบัติใหม่และการอัปเดตประสิทธิภาพในอนาคต นอกจากนี้ PHP คาดว่าจะได้รับการปรับปรุงประสิทธิภาพเพิ่มเติมในเร็ว ๆ นี้ แม้จะมีช่องว่างความเข้ากันได้ย้อนหลัง แต่ปัญหาส่วนใหญ่ก็แก้ไขได้ง่าย ขณะนี้ไลบรารีและเฟรมเวิร์กกำลังโอนย้ายโค้ดไปยัง PHP 7 จึงทำให้เวอร์ชันล่าสุดพร้อมใช้งาน ฉันต้องการแนะนำให้คุณลองและดูผลลัพธ์ด้วยตัวคุณเอง บางทีแอปพลิเคชันของคุณอาจได้รับการสนับสนุนแล้วและรอการใช้งานและรับประโยชน์จาก PHP 7
ที่เกี่ยวข้อง: รายการข้อผิดพลาด 10 ประการที่นักพัฒนา PHP ทำ>