บทนำสู่ PHP 7: มีอะไรใหม่และมีอะไรหายไป
เผยแพร่แล้ว: 2022-03-11หนึ่งในกิจกรรมที่น่าตื่นเต้นที่สุดในปี 2015 ในโลกของ PHP คือการเปิดตัว PHP 7, 10 ปีหลังจากการเปิดตัวเวอร์ชันหลักล่าสุด, PHP 5 ด้วยก้าวสำคัญไปข้างหน้า PHP 7 นำเสนอคุณสมบัติใหม่และการอัพเกรดประสิทธิภาพมากมาย .
อย่างไรก็ตาม ยังลบฟังก์ชันเก่าที่เลิกใช้แล้ว ซึ่งแนะนำตัวแบ่งความเข้ากันได้บางส่วน ทำให้ยากสำหรับแอปพลิเคชันรุ่นเก่าที่จะโยกย้ายไปยังเวอร์ชันใหม่ คู่มือนี้ควรใช้เป็นบทแนะนำสั้นๆ เกี่ยวกับสิ่งที่จะเกิดขึ้นหากคุณวางแผนที่จะย้ายแอปพลิเคชันที่มีอยู่หรือสร้างแอปพลิเคชันใหม่ นอกเหนือไปจาก PHP 7
แต่เดี๋ยวก่อน PHP 6 หายไปไหน?
หากคุณไม่ได้ทำงานกับ 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 7 กับ PHP 5
ด้วยการอัปเดตแทบทั้งหมด คาดว่าจะมีการอัพเกรดประสิทธิภาพเล็กน้อย อย่างไรก็ตาม คราวนี้ PHP นำการปรับปรุงที่สำคัญกว่าเวอร์ชันก่อนหน้าทำให้ประสิทธิภาพที่แท้จริงเป็นหนึ่งในคุณสมบัติที่น่าสนใจที่สุดของ PHP 7 นี่เป็นส่วนหนึ่งของโครงการ “PHPNG” ซึ่งจัดการกับภายในของ Zend Engine เอง
โดยการปรับโครงสร้างข้อมูลภายในใหม่และเพิ่มขั้นตอนกลางในการคอมไพล์โค้ดในรูปแบบของ Abstract Syntax Tree (AST) ผลลัพธ์ที่ได้คือประสิทธิภาพที่เหนือกว่าและการจัดสรรหน่วยความจำที่มีประสิทธิภาพมากขึ้น ตัวเลขเหล่านี้ดูมีแนวโน้มมาก เกณฑ์มาตรฐานที่ทำบนแอพในโลกแห่งความเป็นจริงแสดงให้เห็นว่า PHP 7 นั้นเร็วเป็นสองเท่าของ PHP 5.6 โดยเฉลี่ย และส่งผลให้ใช้หน่วยความจำน้อยลง 50 เปอร์เซ็นต์ในระหว่างการร้องขอ ทำให้ PHP 7 เป็นคู่แข่งที่แข็งแกร่งสำหรับคอมไพเลอร์ HHVM JIT ของ Facebook ดูอินโฟกราฟิกนี้จาก Zend ที่แสดงประสิทธิภาพของ CMS และกรอบงานทั่วไป
การใช้หน่วยความจำที่ลดลงยังช่วยให้เครื่องขนาดเล็กสามารถจัดการกับคำขอได้ดีขึ้นพร้อมกับโอกาสในการสร้างบริการขนาดเล็กรอบ PHP การเปลี่ยนแปลงภายใน โดยเฉพาะการนำ AST ไปใช้งาน ยังเปิดโอกาสให้มีการเพิ่มประสิทธิภาพในอนาคต ซึ่งสามารถผลักดันประสิทธิภาพให้ดียิ่งขึ้นไปอีก การใช้งานคอมไพเลอร์ JIT แบบใหม่ภายในองค์กรกำลังได้รับการพิจารณาสำหรับเวอร์ชันในอนาคต
PHP 7 น้ำตาลซินแทคติก
PHP 7 มาพร้อมกับคุณสมบัติไวยากรณ์ใหม่ แม้ว่าจะไม่ได้ขยายขีดความสามารถของภาษาเอง แต่ก็เป็นวิธีที่ดีกว่าหรือง่ายกว่าในการทำให้โค้ดของคุณสนุกสนานยิ่งขึ้นในการเขียนและดึงดูดสายตา
ประกาศการนำเข้ากลุ่ม
ตอนนี้ เราสามารถจัดกลุ่มการประกาศการนำเข้าสำหรับคลาสที่ use
จากเนมสเปซเดียวกันเป็นบรรทัดเดียว สิ่งนี้จะช่วยจัดแนวการประกาศในลักษณะที่มีความหมายหรือเพียงแค่บันทึกบางไบต์ในไฟล์ของคุณ
use Framework\Module\Foo; use Framework\Module\Bar; use Framework\Module\Baz;
ด้วย PHP 7 เราสามารถใช้:
use Framework\Module\{Foo, Bar, Baz};
หรือถ้าคุณชอบสไตล์แบบหลายเส้น:
use Framework\Module{ 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'; }
ค่าที่เปรียบเทียบอาจเป็นจำนวนเต็ม ทุ่น สตริง หรือแม้แต่อาร์เรย์ ตรวจสอบเอกสารประกอบเพื่อทำความเข้าใจว่าค่าต่างๆ มีการเปรียบเทียบกันอย่างไร [https://wiki.php.net/rfc/combined-comparison-operator]
คุณลักษณะใหม่ใน PHP 7
แต่แน่นอนว่า PHP 7 ยังมาพร้อมฟังก์ชันใหม่ที่น่าตื่นเต้นอีกด้วย
ประเภทพารามิเตอร์สเกลาร์และคำแนะนำประเภทผลตอบแทน
PHP 7 ขยายการประกาศประเภทก่อนหน้าของพารามิเตอร์ในเมธอด (คลาส อินเตอร์เฟส และอาร์เรย์) โดยการเพิ่มสเกลาร์สี่ประเภท จำนวนเต็ม ( int
) ทุ่น ( float
) บูลีน ( bool
) และสตริง ( string
) เป็นประเภทพารามิเตอร์ที่เป็นไปได้
นอกจากนี้ เราสามารถระบุได้ว่าเมธอดและฟังก์ชันประเภทใดที่ส่งคืน ประเภทที่รองรับ ได้แก่ bool , int , float , string , array , callable , ชื่อของ Class หรือ Interface , self และ parent (สำหรับวิธีการเรียน )
class Calculator { // We declare that the parameters provided are of type integer public function addTwoInts(int $x, int $y): int { return $x + $y; // We also explicitly say that this method will return an integer } }
การประกาศประเภทช่วยให้สร้างแอปพลิเคชันที่มีประสิทธิภาพยิ่งขึ้น และหลีกเลี่ยงการส่งผ่านและคืนค่าที่ไม่ถูกต้องจากฟังก์ชัน ประโยชน์อื่นๆ ได้แก่ ตัววิเคราะห์โค้ดแบบคงที่และ IDE ซึ่งให้ข้อมูลเชิงลึกที่ดีขึ้นเกี่ยวกับ codebase หากไม่มี DocBlocks
เนื่องจาก PHP เป็นภาษาที่พิมพ์ไม่ค่อยดี ค่าพารามิเตอร์และประเภทการส่งคืนบางค่าจึงถูกแคสต์ตามบริบท หากเราส่งค่า “3” ในฟังก์ชันที่มีพารามิเตอร์ประเภท int
ที่ประกาศไว้ ล่ามจะยอมรับค่านั้นเป็นจำนวนเต็มและจะไม่แสดงข้อผิดพลาดใดๆ หากคุณไม่ต้องการสิ่งนี้ คุณสามารถเปิดใช้งาน strict mode
ได้โดยเพิ่มคำสั่ง declare
declare(strict_types=1);
ค่านี้ถูกตั้งค่าเป็นรายไฟล์ เนื่องจากตัวเลือกส่วนกลางจะแบ่งที่เก็บโค้ดกับที่เก็บที่สร้างขึ้นโดยมี การ จำกัดโกลบอลและไม่ได้ ส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิดเมื่อเรารวมโค้ดจากทั้งสองอย่าง
ข้อยกเว้นของเครื่องยนต์
ด้วยการเพิ่มข้อยกเว้นของเครื่องยนต์ ข้อผิดพลาดร้ายแรงที่อาจส่งผลให้มีการยุติสคริปต์สามารถตรวจจับและจัดการได้อย่างง่ายดาย
ข้อผิดพลาด เช่น การเรียกเมธอดที่ไม่มีอยู่จริงจะไม่ยุติสคริปต์ แต่จะทำให้เกิดข้อยกเว้นที่สามารถจัดการได้โดย try catch block ซึ่งช่วยปรับปรุงการจัดการข้อผิดพลาดสำหรับแอปพลิเคชันของคุณ นี่เป็นสิ่งสำคัญสำหรับแอป เซิร์ฟเวอร์ และภูตบางประเภท เนื่องจากข้อผิดพลาดร้ายแรงอาจทำให้ต้องรีสตาร์ท การทดสอบใน PHPUnit ควรใช้งานได้มากขึ้น เนื่องจากข้อผิดพลาดร้ายแรงทำให้ชุดการทดสอบทั้งหมดลดลง ข้อยกเว้น แทนที่จะเป็นข้อผิดพลาด จะได้รับการจัดการเป็นรายกรณีการทดสอบ
PHP 7 เพิ่มคลาสข้อยกเว้นใหม่จำนวนหนึ่งตามประเภทของข้อผิดพลาดที่อาจพบ เพื่อรักษาความเข้ากันได้ระหว่างเวอร์ชันต่างๆ ได้มีการเพิ่มอินเทอร์เฟซ Throwable
ใหม่ที่สามารถใช้งานได้จากข้อยกเว้นของเครื่องยนต์และข้อยกเว้นของผู้ใช้ สิ่งนี้จำเป็นเพื่อหลีกเลี่ยงข้อยกเว้นของกลไกในการขยายคลาสข้อยกเว้นพื้นฐาน ส่งผลให้มีข้อยกเว้นที่เก่ากว่าในการดักจับโค้ดที่ไม่เคยมีมาก่อน
ก่อน PHP 7 สิ่งนี้จะยุติสคริปต์ด้วยข้อผิดพลาดร้ายแรง:
try { thisFunctionDoesNotEvenExist(); } catch (\EngineException $e) { // Clean things up and log error echo $e->getMessage(); }
คลาสนิรนาม
คลาสนิรนามเป็นลูกพี่ลูกน้องของฟังก์ชันนิรนามที่คุณอาจใช้ในอินสแตนซ์ระยะสั้นอย่างง่าย คลาสนิรนามนั้นสร้างและใช้งานได้ง่ายเหมือนกับอ็อบเจกต์ทั่วไป นี่คือตัวอย่างจากเอกสาร
ก่อน-PHP 7
class MyLogger { public function log($msg) { print_r($msg . "\n"); } } $pusher->setLogger( new MyLogger() );
ด้วยคลาสนิรนาม:
$pusher->setLogger(new class { public function log($msg) { print_r($msg . "\n"); } });
คลาสที่ไม่ระบุชื่อมีประโยชน์ในการทดสอบหน่วย โดยเฉพาะอย่างยิ่งในการเยาะเย้ยวัตถุและบริการทดสอบ สิ่งนี้ช่วยให้เราหลีกเลี่ยงไลบรารีและเฟรมเวิร์กการเยาะเย้ยอย่างหนักโดยการสร้างออบเจ็กต์อย่างง่ายที่มีอินเทอร์เฟซที่เราต้องการเยาะเย้ย

ฟังก์ชัน CSPRNG
เพิ่มฟังก์ชันใหม่สองอย่างสำหรับการสร้างสตริงและจำนวนเต็มที่มีการเข้ารหัสลับ
random_bytes(int $len);
ส่งกลับสตริงสุ่มที่มีความยาว $len
random_int(int $min, int $max);
ส่งกลับตัวเลขระหว่าง $min
และ $max
Unicode Codepoint Escape Syntax
ต่างจากภาษาอื่นๆ มากมาย ก่อน PHP 7, PHP ไม่มีวิธีหลีกหนีจากโค้ดพอยท์ Unicode ในตัวอักษรสตริง, . ฟังก์ชันนี้เพิ่มลำดับ Escape \u
เพื่อสร้างอักขระดังกล่าวโดยใช้โค้ดพอยต์ UTF-8 วิธีนี้ดีกว่าการแทรกอักขระโดยตรง ทำให้สามารถจัดการกับอักขระที่มองไม่เห็นได้ดียิ่งขึ้น รวมทั้งอักขระที่มีภาพกราฟิกเหมือนกันแต่มีความหมายต่างกัน
echo "\u{1F602}"; // outputs ‚
โปรดทราบว่าสิ่งนี้จะทำลายรหัสที่มีอยู่ด้วยลำดับ \u
เนื่องจากจะเปลี่ยนพฤติกรรม
เครื่องกำเนิดไฟฟ้าได้รับการอัพเกรด
เครื่องกำเนิดใน PHP ยังมีคุณสมบัติเพิ่มเติมที่ดีอีกด้วย ตอนนี้ตัวสร้างมีคำสั่ง return ที่สามารถใช้เพื่ออนุญาตให้ส่งออกค่าสุดท้ายหลังจากการวนซ้ำ สามารถใช้เพื่อตรวจสอบว่าตัวสร้างได้รับการดำเนินการโดยไม่มีข้อผิดพลาด และช่วยให้รหัสที่เรียกตัวสร้างสามารถจัดการกับสถานการณ์ต่างๆ ได้อย่างเหมาะสม
นอกจากนี้ ตัวสร้างสามารถส่งคืนและให้ผลนิพจน์จากตัวสร้างอื่นๆ ซึ่งช่วยให้พวกเขาสามารถแบ่งการทำงานที่ซับซ้อนเป็นหน่วยที่เรียบง่ายและโมดูลาร์ได้
function genA() { yield 2; yield 3; yield 4; } function genB() { yield 1; yield from genA(); // 'genA' gets called here and iterated over yield 5; return 'success'; // This is a final result we can check later } foreach (genB() as $val) { echo "\n $val"; // This will output values 1 to 5 in order } $genB()->getReturn(); // This should return 'success' when there are no errors.
ความคาดหวัง
ความคาดหวังเป็นส่วนเสริมของฟังก์ชัน assert()
ในขณะที่ยังคงความเข้ากันได้แบบย้อนหลัง อนุญาตให้มีการยืนยันต้นทุนเป็นศูนย์ในรหัสการผลิต และให้ความสามารถในการส่งข้อยกเว้นที่กำหนดเองเมื่อการยืนยันล้มเหลว ซึ่งอาจมีประโยชน์ในระหว่างการพัฒนา
assert()
กลายเป็นโครงสร้างภาษาใน PHP 7 การยืนยันควรใช้เพื่อจุดประสงค์ในการดีบักเท่านั้นในการพัฒนาและทดสอบสภาพแวดล้อม ในการกำหนดค่าพฤติกรรม เราได้รับคำสั่งใหม่สองคำสั่ง
-
zend.assertions
-
1
: สร้างและรันโค้ด (โหมดการพัฒนา) (ค่าเริ่มต้น) -
0
: สร้างรหัส แต่ข้ามไปรอบ ๆ ที่รันไทม์ -
-1
: ไม่สร้างโค้ดที่ทำให้ต้นทุนเป็นศูนย์ (โหมดการผลิต)
-
-
assert.exception
-
1
: โยนเมื่อการยืนยันล้มเหลวไม่ว่าจะโดยการโยนวัตถุที่ให้ไว้เป็นข้อยกเว้นหรือโดยการโยนวัตถุ AssertionError ใหม่หากไม่มีข้อยกเว้น -
0
: ใช้หรือสร้าง Throwable ตามที่อธิบายไว้ข้างต้น แต่สร้างเฉพาะคำเตือนตามวัตถุนั้นแทนที่จะโยนมัน (เข้ากันได้กับพฤติกรรม PHP 5)
-
กำลังเตรียมย้ายจาก PHP 5 เป็น PHP 7
การเปิดตัวรุ่นใหญ่ทำให้เกิดโอกาสในการเปลี่ยนแปลง/อัปเดตฟังก์ชันที่เก่ากว่า หรือแม้แต่ลบออกหากถือว่าเก่าเกินไปหรือเลิกใช้งานมาระยะหนึ่งแล้ว การเปลี่ยนแปลงดังกล่าวอาจทำให้เกิดการหยุดชะงักของความเข้ากันได้ในแอปพลิเคชันรุ่นเก่า
ปัญหาอีกประการหนึ่งที่เกิดขึ้นจากการก้าวกระโดดของเวอร์ชันดังกล่าวคือไลบรารีและเฟรมเวิร์กที่สำคัญที่คุณพึ่งพาอาจยังไม่ได้รับการอัปเดตเพื่อรองรับเวอร์ชันล่าสุด ทีมงาน PHP ได้พยายามทำให้การเปลี่ยนแปลงใหม่เป็นแบบย้อนกลับได้มากที่สุด และอนุญาตให้การย้ายไปยังเวอร์ชันใหม่จะไม่เจ็บปวดเท่าที่เป็นไปได้ แอปที่ใหม่กว่าและทันสมัยกว่าควรย้ายไปใช้เวอร์ชันใหม่ได้ง่ายขึ้น ในขณะที่แอปที่เก่ากว่าอาจต้องตัดสินใจว่าประโยชน์ที่ได้รับมีมากกว่าต้นทุนหรือไม่ อาจเลือกที่จะไม่อัปเดต
การหยุดพักส่วนใหญ่เป็นเรื่องเล็กน้อยและสามารถบรรเทาได้ง่ายในขณะที่คนอื่นอาจต้องใช้ความพยายามและเวลามากขึ้น โดยทั่วไป หากคุณมีคำเตือนการเลิกใช้งานในแอปพลิเคชันของคุณก่อนที่จะติดตั้ง PHP 7 คุณอาจได้รับข้อผิดพลาดที่จะทำให้แอปพลิเคชันหยุดทำงานจนกว่าจะได้รับการแก้ไข คุณได้รับคำเตือนแล้วใช่ไหม
SAPI และส่วนขยายเก่า
สิ่งสำคัญที่สุดคือ SAPIs เก่าและเลิกใช้แล้วจะถูกลบออกเช่นเดียวกับส่วนขยาย mysql
(แต่คุณไม่ควรใช้สิ่งนี้ตั้งแต่แรกใช่ไหม) สำหรับรายการส่วนขยายทั้งหมดและฟีเจอร์ที่ถูกลบออก คุณสามารถตรวจสอบ RFC ได้ที่นี่และที่นี่
นอกจากนี้ 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
แท็กแบบเก่าถูกเอาออก
แท็กเปิด/ปิด <% ... %>
, <%= ... %>
, <script language="php"> ... </script>
ถูกลบและใช้งานไม่ได้อีกต่อไป การแทนที่พวกมันด้วยอันที่ถูกต้องน่าจะง่าย แต่คุณกำลังทำอะไรกับมันล่ะ แปลก?
ชื่อคลาส อินเทอร์เฟซ และลักษณะไม่ถูกต้อง
ผลลัพธ์จากการเพิ่มเติม เช่น คลาสพารามิเตอร์และประเภทการส่งคืน อินเทอร์เฟซและคุณลักษณะไม่ได้รับอนุญาตให้มีชื่อต่อไปนี้อีกต่อไป:
- bool
- int
- ลอย
- สตริง
- โมฆะ
- จริง
- เท็จ
สิ่งเหล่านี้ทำให้แอพพลิเคชั่นและไลบรารีที่มีอยู่ใช้งานไม่ได้ แต่ควรแก้ไขได้ง่าย นอกจากนี้ แม้ว่าจะไม่ทำให้เกิดข้อผิดพลาดใดๆ และถูกต้อง แต่ไม่ควรใช้สิ่งต่อไปนี้เนื่องจากสงวนไว้สำหรับใช้ในอนาคต:
- ทรัพยากร
- วัตถุ
- ผสม
- ตัวเลข
การละเว้นจากการใช้ควรช่วยให้คุณไม่ต้องเปลี่ยนงานในอนาคต
สำหรับรายการการเปลี่ยนแปลงทั้งหมดที่อาจทำให้ใช้งานร่วมกันไม่ได้ ให้ตรวจสอบเอกสารนี้
คุณยังสามารถใช้ php7cc ซึ่งจะตรวจสอบโค้ดของคุณ และสามารถตรวจพบปัญหาที่อาจเกิดขึ้นหากคุณเปลี่ยนไปใช้ PHP 7 แต่แน่นอนว่า ไม่มีวิธีใดที่ดีไปกว่าการติดตั้ง PHP 7 และพิสูจน์ด้วยตัวคุณเอง
ปัญหาความเข้ากันได้ของ PHP 7 ที่อาจเกิดขึ้น
ความเข้ากันได้ของโครงสร้างพื้นฐาน PHP 7
บริการโฮสติ้งจำนวนมากได้เริ่มเพิ่มการรองรับ PHP 7 นี่เป็นข่าวดีสำหรับผู้ให้บริการโฮสติ้งที่ใช้ร่วมกัน เนื่องจากประสิทธิภาพที่เพิ่มขึ้นจะช่วยให้พวกเขาเพิ่มจำนวนเว็บไซต์ไคลเอนต์บนฮาร์ดแวร์ของพวกเขา ลดค่าใช้จ่ายในการดำเนินงานและเพิ่มอัตรากำไรขั้นต้น สำหรับลูกค้าเอง พวกเขาไม่ควรคาดหวังการเพิ่มขึ้นมากเกินไปภายใต้เงื่อนไขเหล่านี้ แต่เพื่อความเป็นธรรม การแชร์โฮสติ้งไม่ใช่ตัวเลือกที่เน้นด้านประสิทธิภาพอยู่ดี
ในทางกลับกัน บริการที่มีเซิร์ฟเวอร์ส่วนตัวเสมือนหรือเซิร์ฟเวอร์เฉพาะจะได้รับประโยชน์อย่างเต็มที่จากประสิทธิภาพที่เพิ่มขึ้นนี้ บริการ PaaS บางอย่าง เช่น Heroku รองรับ PHP 7 ตั้งแต่ต้น แต่บริการอื่นๆ เช่น AWS Beanstalk และ OpenShift ของ Oracle นั้นล้าหลัง ตรวจสอบเว็บไซต์ของผู้ให้บริการ PaaS เพื่อดูว่ารองรับ PHP 7 แล้วหรือไม่ หรือจะมีการสนับสนุนในอนาคตอันใกล้นี้หรือไม่
แน่นอน ผู้ให้บริการ IaaS อนุญาตให้คุณควบคุมฮาร์ดแวร์และติดตั้ง PHP 7 (หรือคอมไพล์หากคุณชอบมากกว่า) แพ็คเกจ PHP 7 พร้อมใช้งานแล้วสำหรับสภาพแวดล้อม IaaS หลัก
ความเข้ากันได้ของซอฟต์แวร์ PHP 7
นอกจากความเข้ากันได้ของโครงสร้างพื้นฐานแล้ว คุณยังต้องคำนึงถึงปัญหาความเข้ากันได้ของซอฟต์แวร์ที่อาจเกิดขึ้นด้วย ระบบจัดการเนื้อหายอดนิยม เช่น WordPress, Joomla และ Drupal ได้เพิ่มการรองรับ PHP 7 ด้วยรุ่นล่าสุด กรอบงานหลักเช่น Symfony และ Laravel ยังได้รับการสนับสนุนอย่างเต็มที่
อย่างไรก็ตาม ถึงเวลาสำหรับคำเตือน การสนับสนุนนี้ไม่ขยายไปยังโค้ดของบุคคลที่สามในรูปแบบของส่วนเสริม ปลั๊กอิน แพ็คเกจ หรือ CMS หรือเฟรมเวิร์กใดๆ ที่คุณเรียกใช้ พวกเขาอาจประสบปัญหาความเข้ากันได้และเป็นความรับผิดชอบของคุณที่จะต้องตรวจสอบให้แน่ใจว่าทุกอย่างพร้อมสำหรับ PHP 7
สำหรับที่เก็บที่ใช้งานอยู่และได้รับการดูแล ไม่ควรเป็นปัญหา อย่างไรก็ตาม ที่เก็บที่เก่ากว่าและไม่ได้รับการดูแลซึ่งไม่มีการสนับสนุน PHP 7 อาจทำให้แอปทั้งหมดของคุณใช้งานไม่ได้
อนาคตของ PHP
การเปิดตัว PHP 7 ได้ลบโค้ดเก่าและล้าสมัยออก และปูทางสำหรับคุณลักษณะใหม่และการอัพเกรดประสิทธิภาพในอนาคต นอกจากนี้ คาดว่า PHP จะได้รับการเพิ่มประสิทธิภาพเพิ่มเติมเร็วๆ นี้ แม้ว่าจะมีตัวแบ่งความเข้ากันได้กับรุ่นก่อน ๆ แต่ปัญหาส่วนใหญ่ก็แก้ไขได้ง่าย
ขณะนี้ไลบรารีและเฟรมเวิร์กกำลังย้ายโค้ดไปยัง PHP 7 ซึ่งจะทำให้เวอร์ชันล่าสุดพร้อมใช้งาน ฉันแนะนำให้คุณลองใช้และเห็นผลด้วยตัวคุณเอง บางทีแอปพลิเคชันของคุณอาจใช้งานร่วมกันได้และกำลังรอการใช้งาน และได้รับประโยชน์จาก PHP 7