ฉันจะส่งข้อมูลวิธีการเชิงวัตถุใน PHP ได้อย่างไร


11

ฉันพบว่าแม้เมื่อทำงานกับกรอบ MVC (เช่น CodeIgniter) ฉันมักหันไปใช้อาร์เรย์ที่ซ้อนกันมากกว่าวัตถุ

สิ่งนี้ไม่เป็นไปตามความเข้าใจในเชิงวัตถุของฉัน ตัวอย่างเช่นถ้าฉันจะย้ายรหัสไปยัง Java แล้วฉันจะไม่ฝันที่จะผ่านอาร์เรย์ (หรือเวกเตอร์หรืออะไรก็ตาม) รอบ ๆ แบบนั้น

ฉันสงสัยว่านี่เป็นวิธีที่เหมาะสมในการจัดการข้อมูลหรือไม่ มีเหตุผลว่าทำไมอาร์เรย์ถูกส่งผ่านอย่างนี้ใน PHP หรือทำไมวัตถุไม่ได้ใช้? วิธีที่ดีที่สุดในการส่งผ่านข้อมูลคืออะไร

คำตอบ:


8

อย่าสับสน OO ของ Java กับ PHP Java เป็นภาษากระบวนทัศน์เดียวซึ่งหมายความว่ามันเป็นเพียง OO PHP ในอีกด้านหนึ่งเป็นภาษากระบวนทัศน์หลากหลายคุณสามารถทำการเขียนโปรแกรมใช้งานได้หรือ OO หรือทั้งสองอย่าง

ขณะนี้ไม่มีสิ่งเช่นการดำเนินการ "ไม่ดี" ของ OO OO ของ Java ไม่ได้มีการใช้งานที่ชัดเจนว่าทุกภาษาควรหรือต้องปฏิบัติตาม มีแนวคิดบางอย่างที่ชัดเจนและทั้งสองภาษานำไปใช้อย่างเต็มที่ในแบบของตนเอง (Java ตั้งแต่เริ่มต้น, PHP ตั้งแต่เวอร์ชัน 5)

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

หากคุณเริ่มต้นด้วย PHP จะใช้ Java เป็นข้อมูลอ้างอิงสำหรับแนวทางปฏิบัติ OO ที่ดี แต่ไม่จำกัดความเข้าใจ PHP ของคุณเพราะสิ่งที่ "Java ทำมันแตกต่าง" คุณสามารถทำให้ทั้งสองอย่างผิดพลาดได้กระบวนทัศน์จะไม่ช่วยคุณหากคุณไม่เข้าใจแนวคิด

หากในกรณีใดก็ตามที่คุณพบว่า Java มีความชอบมากกว่า (ตามความชอบส่วนตัว) ลองเข้าไปที่ Ruby for web development พวกเขามีความสัมพันธ์ใกล้ชิดกันมากขึ้น


ทำไมเราไม่ควรสับสน Java OO กับ PHP OO พวกมันค่อนข้างเหมือนกันยกเว้นว่า PHP มีประเภทข้อมูลอาร์เรย์ / แฮชดั้งเดิม
Martin Wickman

การใช้งานจะคล้ายกันมาก ฉันอ้างถึงวิธีการใช้งานของทั้งสองภาษา
yannis

ฉันมีปัญหาใน OOP ฉันต้องการสร้างการออกแบบ OOP สำหรับแอปพลิเคชัน (ฐาน PHP) ซึ่งวัตถุหนึ่งจะขึ้นอยู่กับวัตถุอื่น ฉันจะจัดการสิ่งนี้ใน PHP ได้อย่างไร ช่วย plz ฉัน ...
อิมรานข่าน

ตัวอย่างสถานการณ์: วัตถุโรงแรมมีวัตถุของห้องพักซึ่งวัตถุห้องพักมีวัตถุวันที่ ... และวัตถุวันที่มีราคาสำหรับประเภทบุคคล ตอนนี้วิธีจัดการกับสถานการณ์ประเภทนี้ใน PHP โดยฐาน OOP (เนื่องจากมีข้อมูลขนาดใหญ่ที่ต้องการการประมวลผลในแต่ละระดับ)
Imran Khan

@ วอลเตอร์ฉันรอคำตอบของคุณ .... โปรดช่วยฉันด้วย
Imran Khan

2

การใช้อ็อบเจกต์แทนอาเรย์เพียงเพราะมันไม่ใช่ออบแบบกระบวนทัศน์มันเป็นเพียงการตั้งค่าส่วนตัว :)

ออบเจ็กต์ให้โค้ดที่มีประโยชน์ใน IDE, อินเตอร์เฟส (การบอกกล่าวชนิด) และการสืบทอดสามารถใช้ได้

ถ้าคุณต้องการใช้วัตถุแทนที่จะเป็นอาร์เรย์เพราะคุณเห็นประโยชน์ใด ๆ - ใช้พวกมัน แต่ถ้าคุณต้องการใช้พวกมันเพียงเพราะมันเป็นวัตถุ - อย่าเสียเวลาในการเปลี่ยนโครงสร้างนี้ :)


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

@ Yanis Rizos ใช่วัตถุยังสามารถใช้หน่วยความจำน้อยแก้ไข
OZ_

ไม่ใช่เพียงแค่ว่าพวกเขาสามารถใช้หน่วยความจำน้อยลง แต่มันคือการใช้หน่วยความจำที่ไม่เกี่ยวข้องเพราะมันเล็กน้อยเมื่อเทียบกับประสิทธิภาพด้านหน่วยความจำอื่น ๆ ของระบบและเพื่อประโยชน์ของการใช้วัตถุ ถ้าเราใส่ใจเกี่ยวกับการใช้หน่วยความจำมากเราจะไม่ใช้วัตถุ สิ่งที่เราใส่ใจคือวัตถุให้เครื่องมือที่ดีกว่าแก่เราในการให้เหตุผลและสร้างระบบ
Rein Henrichs

@ Rein Henrichs ฉันรู้แล้วขอบคุณ นั่นเป็นเหตุผลที่คำทั้งหมดเกี่ยวกับ 'ความจำ' ถูกลบออกจากคำตอบของฉัน ฉันไม่ได้พยายามเพิ่มประสิทธิภาพที่โง่ แต่ฉันแน่ใจว่าobjects just because they are objectsไม่ใช่เหตุผลสำหรับการปรับโครงสร้างใหม่ :) อ่านคำตอบของฉันไม่ใช่แค่ความคิดเห็นเท่านั้น
OZ_

ยุติธรรมพอฉันแสดงความคิดเห็นก่อนการแก้ไข
Rein Henrichs

1

คุณไม่ได้ส่งผ่านข้อมูลในระบบ OO จริงๆ - คุณส่งผ่านวัตถุต่างๆ ความแตกต่างคือวัตถุมีพฤติกรรมเช่นเดียวกับข้อมูล นั่นคือเหตุผลที่พวกเขาเรียกมันว่าเป็นวัตถุและไม่ใช่ข้อมูลเชิง

ตราบใดที่คุณไม่ต้องการพฤติกรรมกับข้อมูลของคุณแล้วอาร์เรย์ php แบบเก่าก็ดี (หรือไม่ดีขึ้นอยู่กับมุมมองของคุณ) เป็นวัตถุค่า


0

ฉันคิดว่านี่เป็นเพียงคำถามของการปรับ - มีการใช้งานหลายอย่างของ "วัตถุ" ในการเขียนโปรแกรม - Python และ Javascript มีคุณสมบัติที่แตกต่างกันอย่างเด่นชัด PHP OO เป็นเนื้อหาที่แฮ็ค - อาร์เรย์ PHP ไม่ใช่ "วัตถุ" ในความหมายดั้งเดิม - แต่มันมีจุดประสงค์ที่ชัดเจน ถ้าคุณไม่ต้องการให้ข้อมูลมีพฤติกรรมที่กำหนดเองแล้วทำไมต้องใช้วัตถุ?

แก้ไข:

เรื่องวัตถุค่าไม่เปลี่ยนรูป

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/


เพื่อให้ข้อมูลมีโครงสร้างที่เชื่อถือได้ ใช่ฉันสามารถสร้างฟังก์ชั่นที่แสดงรูปแบบเฉพาะ / การซ้อนของอาเรย์ แต่ใครจะบอกว่าฉันไม่ได้เขียนฟังก์ชั่นอื่นที่แก้ไขมันเล็กน้อยแล้วส่งต่อไป
Matthew

1
แน่นอน - คุณจะต้องมีอ็อบเจกต์เพื่อป้องกันการเข้าถึงตัวแปร - เนื่องจากไม่มีการเทียบเท่ากับ PHP ของ Python tuples แต่คุณไป - คุณได้กำหนดปัญหาคุณต้องใช้โครงสร้างที่มีอยู่ในภาษา ... หรือเพียงแค่เรียนรู้ที่จะอยู่กับ "นิสัยใจคอ" ฉันได้เพิ่มลิงค์ไปยังโพสต์เริ่มต้นของฉันที่มีการอภิปรายที่น่าสนใจของปัญหา
sunwukung
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.