นี่คือฟีเจอร์เจ๋งๆ จาก PHP ที่สามารถทำให้ชีวิตของคุณง่ายขึ้น :)

PHP มันแปลกๆ

มันคล้ายกับ Java นิดหน่อย: ผู้คนเอาแต่พูดว่ามันกำลังจะตาย แต่ อย่างไรก็ตาม มันยังคง ขับเคลื่อนเว็บไซต์มากกว่าครึ่งหนึ่งบนโลก (ส่วนหนึ่งเป็นเพราะเป็นภาษาของ Wordpress ซึ่งปัจจุบันเป็น CMS ที่ใช้มากที่สุดในโลก) โดยพื้นฐานแล้ว ภาษานี้อยู่ที่นั่นมานานแล้วจนเข้ามาแทนที่… และแม้แต่นักวิจารณ์ที่ชี้ให้เห็นถึงข้อบกพร่องและความแปลกประหลาดของภาษาเหล่านี้ก็ไม่สามารถสั่นคลอนสิ่งต่าง ๆ ได้มากพอที่จะพลิกกลับเทรนด์ได้

บริษัทใหญ่ๆ เช่น Facebook หรือ Wikipedia ก็ใช้ภาษานี้เช่นกัน ซึ่งทำให้ภาษานี้เป็นองค์ประกอบพื้นฐานของระบบนิเวศของเว็บ แต่จริงๆ แล้ว คุณรู้สึกว่ามันเป็นภาระมากกว่าตัวเลือกที่แท้จริง ตาม "บทสัมภาษณ์ของ Yishan Wong" วิศวกรของ Facebook เมื่อไม่กี่ปีที่ผ่านมา:

เหตุผลที่ Facebook ไม่ย้ายออกจาก PHP ก็เพราะมันมีความเฉื่อย (ซึ่งก็คือสิ่งที่มีอยู่) และวิศวกรของ Facebook ก็ได้จัดการแก้ไขข้อบกพร่องหลายประการผ่านการผสมผสานแพตช์ในทุกระดับของสแต็กและภายในที่ยอดเยี่ยม มีระเบียบวินัยผ่านแบบแผนและสไตล์ของโค้ด […]

และฉันคิดว่านั่นคือสิ่งสำคัญสำหรับ PHP: มันต้องใช้ความเข้มงวดและวิสัยทัศน์อย่างมากเพื่อให้ได้โครงสร้างที่เหมาะสม มิฉะนั้น จะผ่อนปรนและยินยอมจนคุณสามารถสร้างเรื่องยุ่งวุ่นวายได้อย่างรวดเร็ว ภาษามีการเติบโตในช่วงหลายปีที่ผ่านมา และตอนนี้ด้วยการผสมผสานการนำเข้าและคลาสเข้าด้วยกัน คุณสามารถลดโค้ดของคุณเป็นส่วนๆ ที่อ่านได้ ถึงกระนั้น: คุณมักจะต่อและแยกสตริงเป็นพันครั้งเสมอ โดยใช้ตัวเลขเป็นอักขระและในทางกลับกัน หรือจัดเก็บรายการของคุณในอาร์เรย์ที่ถูกคีย์จริง ๆ เช่นพจนานุกรม...

แต่! นี่เป็นสิ่งที่ช่วยให้คุณทำสิ่งมหัศจรรย์ได้อย่างรวดเร็ว...

ต่อไปนี้คือตัวอย่างบางส่วนของ คุณลักษณะเจ๋งๆ ของ PHP ;)

การสร้างแจงนับและแสดงรายการค่าที่เป็นไปได้

หากคุณใช้เวอร์ชัน PHP ที่ต่ำกว่า 8.1 คุณไม่สามารถสร้าง enums ใน PHP ได้จริง: คุณลักษณะนี้ไม่พร้อมใช้งานในภาษา และจำไว้ว่าอำนาจของ PHP นั้นมีครึ่งหนึ่งมาจากรุ่นเก่า ดังนั้นมีโอกาสที่คุณจะใช้เวอร์ชันเก่ากว่า

อย่างไรก็ตาม เช่นเดียวกับที่ฉันพูดถึง "ในบทช่วยสอน Python ครั้งล่าสุดของฉัน" คุณสามารถแอบผ่านความยากลำบากนี้และใช้คลาสแทนการแจงนับจริงได้

ตัวอย่างเช่น สมมติว่าคุณต้องการได้รับการแจงนับสำหรับการจัดการตัวพิมพ์สตริง จากนั้นคุณสามารถทำสิ่งนี้:

การสร้าง คลาสนามธรรม (ด้วยคีย์เวิร์ด abstract) เป็นวิธีหนึ่งที่จะประกันได้ว่าคุณไม่สามารถสร้างอินสแตนซ์ของคลาสนี้ได้จริงๆ เพราะเป็นวิธีบังคับให้คลาสนั้นเป็นข้อมูลที่บริสุทธิ์ การสร้าง ค่าคงที่ของตัวแปร (ด้วยคำหลัก const) มีประโยชน์มาก เพราะมันหมายความว่าเราจะสามารถเข้าถึงค่าต่างๆ ได้โดยไม่ต้องสร้างอินสแตนซ์ของคลาส StringCasing:

แน่นอน คุณสามารถกำหนดค่าให้กับสิ่งที่เข้าใจง่ายกว่าได้: ที่นี่ เราสามารถใช้สตริงแทน ints ได้ ตัวอย่างเช่น หากเราต้องการเก็บค่าเหล่านั้นไว้ในไฟล์กำหนดค่าแต่ยังคงได้รับเอาต์พุตที่อ่านได้:

และหากคุณต้องการแสดงรายการค่าที่เป็นไปได้ทั้งหมดสำหรับแจงนับของคุณ (สมมติว่าคุณต้องการให้มีองค์ประกอบ HTML แบบเลื่อนลงเพื่อเลือกตัวพิมพ์เล็ก/ใหญ่ที่มีอยู่) คุณสามารถใช้ การสะท้อนกลับ ฉันเคยพูดถึงเรื่องนี้หลายครั้งใน บทความ C# ของฉัน และ บทช่วยสอน RTS ของฉัน: การสะท้อนกลับเป็นเรื่องเกี่ยวกับ "การค้นพบ" ข้อมูลเกี่ยวกับออบเจ็กต์ของคุณในขณะรันไทม์ แทนที่จะเป็นประเภทและคลาสการเข้ารหัสแบบฮาร์ดโค้ด ดังนั้น ตรงนี้ช่วยให้เรารับรายการค่าแบบไดนามิก เพียงแค่รับค่าคงที่ของคลาส:

เรากำลังใช้ ฟังก์ชันคงที่ อีกครั้ง เพื่อให้เราสามารถเรียกเมธอดนี้ได้โดยไม่ต้องสร้างอินสแตนซ์ของคลาส StringCasing :)

หากคุณต้องการบางสิ่งที่ทรงพลังกว่านี้ คำตอบ Stack Overflow นี้ ให้ตัวอย่างที่ดีจริงๆ ของ คลาส enum ที่ได้รับการปรับปรุง ที่สามารถขยายได้ ซึ่งช่วยให้คุณแสดงรายการค่าที่เป็นไปได้และช่วยให้คุณตรวจสอบว่า อนุญาตให้ใช้คีย์หรือค่าได้ โค้ดนี้ยังปรับส่วนการสะท้อนให้เหมาะสมโดย การแคชผลลัพธ์ เนื่องจากอาจนำไปสู่ค่าใช้จ่ายหากใช้บ่อยเกินไป

หมายเหตุ: สิ่งที่ยอดเยี่ยมจริงๆ ก็คือ คุณลักษณะ enum ใหม่ที่นำมาใช้ใน PHP 8.1 ทำงานได้อย่างราบรื่นกับเทคนิคนี้: นอกเหนือจากคำจำกัดความของ enum แล้ว คุณสามารถปล่อยให้โค้ดที่เหลือของคุณเหมือนเดิมได้เนื่องจากโค้ดใหม่ enums ยังใช้ตัวเข้าถึงโคลอนคู่ ::

การเรียกคลาสหรือฟังก์ชันตามชื่อ

เพื่อดำเนินการต่อในหัวข้อคลาส วิธีการ และการสะท้อนกลับ: PHP ใช้งานง่ายเป็นพิเศษเมื่อพูดถึงการเรียกคลาสหรือเมธอดแบบไดนามิก ซึ่งหมายความว่าคุณมีชื่อคลาสหรือฟังก์ชันของคุณในตัวแปรและคุณต้องการกลับคืน วัตถุที่ตรงกัน "ของจริง"

ใน C# คุณจะต้องใช้แพ็คเกจ System.Reflection เพื่อ แยกคลาสกลับจากแอสเซมบลีปัจจุบัน; ใน Python คุณจะต้องนำเข้าโมดูลที่เหมาะสมแล้วรับแอตทริบิวต์ที่เกี่ยวข้อง หรือใช้ importlib ตามที่อธิบายไว้ ที่นี่; ใน JavaScript คุณจะต้องเข้าถึงตัวจัดการบริบทส่วนกลางบางตัว เช่น window และรับฟังก์ชันจากมัน - แต่บน Node มันจะแตกต่างออกไป...

ใน PHP การเรียกคลาสหรือเมธอดด้วยชื่อเป็นเพียงการมีชื่อและเรียกมัน :)

แบบนี้:

มันฟังดูง่ายเกินไปสักหน่อย!

แน่นอนว่ามันทำงานในลักษณะเดียวกันกับคลาส และคุณสามารถส่งผ่านพารามิเตอร์ได้ เช่นเดียวกับการโทรปกติ:

ใช่แล้ว จริงๆ แล้ว คุณต้อง ตรวจสอบให้แน่ใจว่ามีการกำหนดคลาสหรือฟังก์ชันไว้จริงๆ ดังนั้น อาจต้องมีการนำเข้าและการอ้างอิงเพิ่มเติมเล็กน้อยหากโค้ดเบสของคุณถูกแยกอย่างเหมาะสม ขึ้น แต่ฉันพบว่ามันค่อนข้างน่าแปลกใจว่ามันตรงไปตรงมาแค่ไหน ต้องขอบคุณแนวคิดหลักของ PHP ในการสร้างเทมเพลตและเชื่อมโยงทุกสิ่ง ;)

ยูทิลิตี้อาร์เรย์บางตัว

ในความคิดของฉัน การทำงานกับ อาร์เรย์ใน PHP นั้น หลีกเลี่ยงไม่ได้แต่อาจทำให้เหนื่อย กล่าวคือเนื่องจากภาษามีแนวโน้มที่จะ "ปะปน" อาร์เรย์ที่มีคีย์และไม่ใช่คีย์ หมายความว่าคุณใช้คอนเทนเนอร์เดียวกันทั้งสำหรับ รายการที่เรียงลำดับ (ที่มีดัชนีตัวเลข) และ ค่าคู่คีย์... ซึ่งเรียกว่า พจนานุกรม ในภาษาอื่นๆ อีกมากมาย ภาษาโปรแกรม!

อาจทำให้ยากต่อการทราบว่าวัตถุที่คุณกำลังจัดการอยู่เป็นเพียงชุดของค่า หรือมีคีย์ที่เกี่ยวข้องด้วยหรือไม่ นอกจากนี้ จาก PHP 5.4.0 อาร์เรย์ที่ไม่มีคีย์สามารถเขียนได้จริงโดยใช้ไวยากรณ์แบบย่อ [] ซึ่งหมายความว่าคุณสามารถเขียนอาร์เรย์ได้มากถึงสามวิธี...

แต่ถึงแม้จะมีข้อบกพร่องเหล่านี้ (ในสายตาของฉัน) PHP ยังมีคุณสมบัติที่เรียบร้อยสำหรับอาร์เรย์เหล่านี้ เช่น:

  • รับจำนวนองค์ประกอบทั้งหมดในรายการ:
  • สับเปลี่ยนองค์ประกอบทั้งหมดในอาร์เรย์:
  • รับไอเท็มสุ่มหนึ่งรายการขึ้นไปจากอาเรย์:

แน่นอนว่าตอนนี้ "ยังมีฟังก์ชันอาเรย์อีกมากมาย" ให้เลือก เช่น การรีแมป การกรอง การเดินแบบเรียกซ้ำ ฯลฯ

แต่ตัวอย่างเหล่านี้น่าสนใจเพราะภาษาโปรแกรมอื่นๆ สามารถทำให้การคำนวณเหล่านี้ (ค่อนข้างมากเกินไป) ซับซ้อนได้ ตัวอย่างเช่น ในการรับจำนวนองค์ประกอบของอาร์เรย์ใน Python คุณต้องนำเข้าโมดูลในตัว collections และสร้าง Counter; และใน C# การสับหรือการแยกองค์ประกอบแบบสุ่มทำได้โดยใช้ตัวสร้างแบบสุ่ม!

นั่นเป็นหนึ่งในกรณีแปลกๆ เหล่านี้ที่ PHP โดดเด่นด้วยความเรียบง่ายของมัน ;)

โบนัส: การสร้างซิงเกิลตัน

นี่ไม่ใช่คุณลักษณะพิเศษหรือลักษณะเฉพาะ ต่อตัว แต่บางครั้งก็มีประโยชน์ที่จะทราบวิธีสร้าง ซิงเกิลตัน ในภาษาการเขียนโปรแกรมที่เป็นไปตามกระบวนทัศน์ OOP

ตามที่ Bob Nystrom อธิบายไว้ในหนังสือที่น่าทึ่งของเขา "Game Programming Patterns" (มีให้บริการฟรีบนเว็บ) "singletons" อาจเป็นอันตรายได้และไม่ใช่ความคิดที่ดีเสมอไป แต่เมื่อคุณออกแบบแอปพลิเคชันของคุณอย่างชัดเจน และต้องเข้าถึงอินสแตนซ์ที่สามารถสร้างได้เพียงครั้งเดียวเท่านั้น รูปแบบนี้ก็น่าสนใจ

ตัวอย่างเช่น บางทีแอปพลิเคชันของคุณอาจมีอินสแตนซ์ส่วนกลางที่มีการกำหนดค่าปัจจุบัน หากต้องการทำให้เป็นซิงเกิลตัน คุณต้องใช้ตัวแปร static จากนั้น เมื่อใดก็ตามที่คุณเข้าถึงอินสแตนซ์ของคุณ หากตัวแปรเป็นโมฆะ คุณจะต้องกรอกข้อมูล มิฉะนั้นคุณจะส่งคืนโดยตรง:

บทสรุป

ฉันยังคงคิดว่า PHP แปลกและมักเกิดข้อผิดพลาดมากมาย เนื่องจากได้รับอนุญาต แต่การใช้มันให้มากขึ้น และโดยเฉพาะอย่างยิ่งการเจาะลึกเข้าไปในฟีเจอร์ใหม่ๆ แสดงให้ฉันเห็นว่าภาษานี้สามารถทำ บางสิ่งที่ดีจริงๆ และคุณสามารถ กลับมาควบคุมได้ โดยมีวินัยเพียงพอ …

… และเนื่องจากฉันค่อนข้างแน่ใจว่า PHP ฝังลึกอยู่ในเน็ตและจะไม่หายไปในเร็วๆ นี้ ฉันเดาว่าเราอาจได้เรียนรู้เคล็ดลับเล็กๆ น้อยๆ เหล่านั้นและทำให้ชีวิตของเราง่ายขึ้น :)

แล้วคุณล่ะ: คุณใช้ PHP หรือคุณกำลังหลีกเลี่ยงมันไม่ว่าจะด้วยวิธีใดก็ตาม? คุณใช้เวอร์ชันล่าสุดหรือเกี่ยวกับ การเติมเต็ม คุณลักษณะใหม่ในระบบเก่าหรือไม่ รู้สึกอิสระที่จะตอบสนองในความคิดเห็น!

หากคุณชอบบทความนี้ คุณสามารถค้นหาบล็อกโพสต์เพิ่มเติมเกี่ยวกับเทคโนโลยี AI และการเขียนโปรแกรมได้ที่ เว็บไซต์ของฉัน :)