นี่อาจไม่ใช่สิ่งที่คุณจะต้องเข้าใจอย่างลึกซึ้งจนกว่าคุณจะทำงานในโครงการซอฟต์แวร์ขนาดใหญ่เป็นเวลาหลายปี วิชาเอกวิทยาการคอมพิวเตอร์ใหม่ ๆ จำนวนมากจะให้คำตอบกับคุณด้วยคำพูดที่ถูกต้อง (การห่อหุ้มการทำงานกับข้อมูลและการบำรุงรักษา) แต่มีเพียงไม่กี่คนที่จะเข้าใจว่าทำไมทุกสิ่งถึงดี
มาดูตัวอย่างกัน
- หากอาร์เรย์ถูกส่งกลับค่าทั้งหมดจะต้องถูกคำนวณล่วงหน้าหรือต้องส่งคืนค่าเล็กน้อยจำนวนมากซึ่งคุณสามารถสร้างค่าที่ซับซ้อนขึ้นได้
ลองนึกถึงวิธี API ที่แสดงรายการโพสต์ WordPress โพสต์เหล่านี้ล้วนมีผู้แต่งผู้แต่งมีชื่อที่อยู่อีเมลหรือแม้แต่โปรไฟล์ที่มีชีวประวัติของพวกเขา
หากคุณส่งคืนโพสต์ทั้งหมดในอาร์เรย์คุณอาจต้อง จำกัด ตัวเองในการส่งคืนอาร์เรย์ของรหัสโพสต์:
[233, 41, 204, 111]
หรือส่งคืนอาร์เรย์ขนาดใหญ่ที่มีลักษณะดังนี้:
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
กรณีแรกของการส่งคืนรายการ ID ไม่เป็นประโยชน์กับคุณมากนักเพราะคุณต้องทำการเรียก API สำหรับแต่ละ ID เพื่อรับข้อมูลบางอย่างเกี่ยวกับโพสต์นั้น
กรณีที่สองจะดึงข้อมูลได้มากกว่าที่คุณต้องการ 90% ของเวลาและทำงานได้มากขึ้น (โดยเฉพาะอย่างยิ่งหากฟิลด์ใด ๆ ที่ซับซ้อนมากในการสร้าง)
ในทางกลับกันวัตถุสามารถให้คุณเข้าถึงข้อมูลทั้งหมดที่คุณต้องการ แต่ยังไม่ได้ดึงข้อมูลนั้นออกมาจริงๆ การกำหนดค่าของเขตข้อมูลสามารถทำได้อย่างเฉื่อยชา (นั่นคือเมื่อจำเป็นต้องใช้ค่าและไม่ได้กำหนดไว้ล่วงหน้า) เมื่อใช้วัตถุ
- อาร์เรย์เปิดเผยข้อมูลและความสามารถมากกว่าที่ตั้งใจไว้
กลับไปที่ตัวอย่างอาร์เรย์ขนาดใหญ่ที่ถูกส่งคืน ตอนนี้อาจมีใครบางคนสร้างแอปพลิเคชันที่วนซ้ำแต่ละค่าภายในอาร์เรย์โพสต์และพิมพ์ออกมา หาก API ได้รับการอัปเดตเพื่อเพิ่มองค์ประกอบพิเศษเพียงรายการเดียวในอาร์เรย์โพสต์นั้นรหัสแอปพลิเคชันจะหยุดทำงานเนื่องจากจะพิมพ์ฟิลด์ใหม่ที่ไม่ควรทำ หากลำดับของรายการในอาร์เรย์โพสต์ที่ส่งคืนโดย API เปลี่ยนแปลงนั่นจะทำให้โค้ดแอปพลิเคชันเสียหายเช่นกัน ดังนั้นการส่งคืนอาร์เรย์จะสร้างการอ้างอิงที่เป็นไปได้ทุกประเภทที่อ็อบเจ็กต์จะไม่สร้างขึ้น
วัตถุสามารถเก็บข้อมูลไว้ภายในซึ่งจะช่วยให้สามารถให้ฟังก์ชันการทำงานที่เป็นประโยชน์แก่คุณได้ ตัวอย่างเช่นวัตถุโพสต์อาจฉลาดพอที่จะส่งคืนโพสต์ก่อนหน้าหรือถัดไป อาร์เรย์ไม่สามารถทำเพื่อคุณได้
ประโยชน์ทั้งหมดของออบเจ็กต์ที่กล่าวมาข้างต้นช่วยในการสร้างระบบที่ยืดหยุ่นมากขึ้น
count()
หรือarray_*()
ฟังก์ชั่นได้ (อย่างน้อยก็เกี่ยวกับการจัดเก็บ / ส่งคืนข้อมูลคีย์ => ข้อมูลค่า) ดูเหมือนจะไม่มีใครพูดถึงหรือว่าฉันพลาดอะไรไป?