มีอะไรใหม่ใน php7

มีอะไรใหม่ใน php7

เมือปลายปีที่แล้วมีข่าวการนำเสนอ PHP7 จาก Rasmus Lerdorf ผู้คิดค้น และพัฒนาภาษา PHP ขึ้นมา ในงาน PHPConf.Asia 2015 ที่ประเทศสิงคโปร์ ซึ่ง Rasmus Lerdorf ได้บรรยายถึง PHP7 ว่ามีอะไรใหม่บ้างให้ผู้พัฒนาเว็บไซต์ได้รู้จักอย่างเป็นทางการ

มีอะไรใหม่ใน PHP7

แคชระดับสอง
ได้มีการปรับปรุงให้ใช้งานเมมโมรี่น้อยลง เพื่อให้ทำงานได้รวดเร็วยิ่งขึ้น ซึ่งก็คือการทำงานจะเร็วเพิ่มเป็น 2 เท่าของ Ruby และ Pyhton มีการสร้างไฟล์เป็นแคชระดับสองสำหรับ OpCode สำหรับ PHP7 จะเห็นว่ามีไฟล์ index.php.bin ด้วยเพื่อใช้ไฟล์นี้เป็นที่เก็บแคชนั่นเอง ซึ่งถ้ามีการอ่านโค้ดเข้า Interpreter แล้ว จะถูกโหลดเก็บไว้ใน SHM OpCache ทำให้สามารถทำงานได้เร็วขึ้นประมาณ 10 เท่า

Abstract Syntax Tree
มีการเพิ่ม Abstract Syntax Tree ทำให้เครื่องมือจำพวก Code Static Analyser ทำงานได้ง่ายขึ้น


Return Type
สามารถระบุประเภทของ Return Type ได้ ซึ่งในเวอร์ชั่นก่อนหน้าจะไม่มี


Strict Scalar Type
สามารถประกาศ Strict Scalar Type ได้ ในส่วนนี้มันไม่ได้ทำงานอัตโนมัติเพราะเวอร์ชั่นเก่าไม่ได้มีการระบุ Type ดังนั้นหากเราต้องการสร้างโปรเจ็กต์ขึ้นใหม่ใน PHP7 จะต้องประกาศ declare(strict_types=1) เพื่อเป็นการบอกว่าเราจริงจังนะกับการระบุ type นี้ เช่น หากเราไม่ระบุ ถ้าเรารับ $msg เป็น string แต่เราส่ง integer เข้าไป มันก็จะทำการ Casting เป็น String ให้อัตโนมัติ


Exceptions on Fatals
Fatal Error มักจะเป็นปัญหาใน PHP เวอร์ชั่นก่อนๆ จากคนเขียนโปรแกรมเองที่ไม่ได้ตรวจสอบตัวแปร ว่ามันเป็น Object หรือเปล่า ปกติ try-catch ของ PHP นี่เรียกว่าแทบจะไร้ประโยชน์เลย เพราะมันกัน Error ได้ไม่ครบทุกเคส ซึ่งเคสใหญ่ๆ นี่ก็คือเจ้า Fatals Error!! แต่ตอนนี้มันสามารถกันได้แล้ว


Anonymous Class
เป็นการประกาศ Class แบบไม่ตั้งชื่อ ส่วนใหญ่จะใช้มากในการเขียนโปรแกรมแบบ OOP เพื่อลดการสร้างคลาสใหม่จำนวนมากๆ ที่ใช้งานแค่ครั้งเดียว


Null Coalesce Operator
เป็นการตรวจสอบค่าว่างของตัวแปร หรือตรวจสอบว่าตัวแปรนี้มีอยู่จริงหรือไม่ ซึ่งก็เหมือนกับการใช้งานคำสั่ง is_null() / isset() ในการตรวจสอบ เพียงแต่ว่าทำให้มันสั้นลงเท่านั้น


Added Closure Call
ฟังก์ชั่นคำสั่งเรียกให้ Function ทำงานซึ่งก็คล้ายๆ กับ .call() กับ .apply() ใน JavaScript ซึ่งดูซับซ้อน คงต้องลองใช้จริงๆ ดูก่อนถึงจะบอกได้ว่ามันจะดีหรือทำให้ปวดหัวหนักกว่าเดิม


Size of Internal Structure
เป็นการพัฒนาโครงสร้างภายใน PHP7 เพื่อให้มันทำงานได้เร็วขึ้น จึงได้มีการปรับโครงสร้างข้อมูล (zval) ให้มีขนาดเล็กลง การปรับแต่ง ส่งผลโดยตรงกับ PHP Extension จะต้องคอมไฟล์ใหม่ทั้งหมดใน PHP7 ดังนั้น ถ้าใครมีใช้ Extension ในเวอร์ชั่นก่อนๆ ต้องดูรายละเอียดให้ดีว่ามีซัพพอร์ตใน PHP7 หรือยัง


Deprecated Function
รายชื่อ function ที่ถูกประกาศเลิกใช้งานใน PHP7

- ext/ereg (use ext/pcre instead)
- preg_replace() eval modifier (use preg_replace_callback() instead)
- ext/mysql (use ext/mysqli or ext/pdo_mysql instead)
- Assignment of new by reference
- Scoped calls of non-static methods from incompatible $this context
 
- dl() in php-fpm
- set_magic_quotes_runtime() and magic_quotes_runtime()
- set_socket_blocking() (use stream_set_blocking() instead)
- mcrypt_generic_end() (use mcrypt_generic_deinit() instead)
- mcrypt_ecb, mcrypt_cbc, mcrypt_cfb and mcrypt_ofb
  (use mcrypt_encrypt() and mcrypt_decrypt() instead)
- datefmt_set_timezone_id() and IntlDateFormatter::setTimeZoneID()
  (use datefmt_set_timezone() or IntlDateFormatter::setTimeZone() instead)
 
- xsl.security_prefs (use XsltProcessor::setSecurityPrefs() instead)
- iconv.input_encoding, iconv.output_encoding, iconv.internal_encoding,
  mbstring.http_input, mbstring.http_output and mbstring.internal_encoding
  (use php.input_encoding, php.internal_encoding and php.output_encoding instead)
 
- $is_dst parameter of the mktime() and gmmktime() functions
- # style comments in ini files (use ; style comments instead)
- String category names in setlocale() (use LC_* constants instead)
- Unsafe curl file uploads (use CurlFile instead)
- PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT driver option
  (use PDO::ATTR_EMULATE_PREPARES instead)
- CN_match and SNI_server_name stream context option (use peer_name instead)

และที่น่าจะกระทบกับโปรแกรมเมอร์มากที่สุดก็คือ

- mysql_xxx ฟังก์ชั่นสำหรับเชื่อมต่อ MySQL ที่ใช้มานานมาก ตอนนี้ต้องไปใช้ mysqli_xxx หรือพวก PDO แทนแล้ว
- ereg ฟังก์ชั่นสำหรับหาแพทเทิล Regular Expression ตอนนี้ต้องเปลี่ยนไปใช้ preg_match แทน
- split ตัวตัดสตริงที่ตอนนี้เปลี่ยนไปใช้ explode() / implode() แทนแล้ว

ประสิทธิภาพ PHP7
นอกจากมีการทำงานที่เร็วขึ้นแล้ว PHP7 ยังมีการปรับขนาด Internal Structure ซึ่งส่งผลให้ขนาดเมมโมรี่ที่ใช้นั้นลดลงอย่างมีนัยสำคัญ และที่น่าสนใจ คือ ตัวของ PHP เอง สามารถคอมไพล์ โดยทำการ Optimized ตัว PHP เองจากโค้ดของ PHP ได้ด้วย คล้ายๆของ WordPress ด้วยการ จูน PHP7 ให้มีความเร็วยอดเยี่ยมโดยเฉพาะ เมื่อใช้กับ WordPress โดยใช้วิธีคอมไพล์แบบ GCC Feedback-Directed Optimization (FDO) 
และสำหรับผู้ที่สนใจทดลองใช้งานตอนนี้ ทาง Rasmus Lerdorf ได้ทำ Vagrant Box เอาไว้ให้ด้วยสำหรับ Clone ชุดพัฒนาไปลองเล่นด้วย ซึ่งภายในมีคอมไพเลอร์ของ PHP7 ให้ ถ้าใครอยากเล่นก็ไปโหลดกันมาดู และถ้ามีบั๊กก็ Report ด้วยล่ะ เขาจะได้แก้กันก่อน PHP7 จะ Release จริง

แชร์บทความ

Facebook Twitter Google Digg Reddit LinkedIn StumbleUpon Email
กำลังโหลด ...