คำอธิบายง่ายๆ PHP OOP เทียบกับขั้นตอน?


106

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

OOP เทียบกับขั้นตอน

  1. ที่ฉันควรเรียนรู้?
  2. รหัสแตกต่างกันอย่างไร ผลกระทบคืออะไร?
  3. PHP Framework ช่วยใน OOP aproach ได้อย่างไร (ฉันต้องการเรียนรู้ CodeIgniter)
  4. ขั้นตอนจำเป็นต้องมี Framework หรือไม่?

ฉันต้องการทราบความแตกต่างของรหัสของทั้งสองอย่างจริงๆความเข้าใจของฉันเกี่ยวกับ OOP คือคุณสร้างคลาสที่เหมือนและสามารถเข้าถึงได้ (ฉันไม่รู้ถ้าถูกต้อง)

ขอบคุณ!



1
ใบหน้าเมื่อนี่ไม่ใช่ลิงค์ที่ยาวมาก
Félix Gagnon-Grenier

ดูเพิ่มเติมที่: anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/functions.html
dreftymac

ดูเพิ่มเติม: blog.higher-order.com/blog/2009/04/27/…
dreftymac

คำตอบ:


280

ความเป็นมา:คุณขอ "คำอธิบายง่ายๆ" ซึ่งแนะนำ:

  1. คุณต้องการภาพรวมที่ไร้สาระโดยไม่มีศัพท์แสง
  2. คุณต้องการสิ่งที่จะช่วยให้คุณเรียนรู้ตั้งแต่เริ่มต้น
  3. คุณได้ค้นพบว่าไม่มีคนสองคนที่เคยตอบคำถามเหมือนกันและมันน่าสับสน นั่นคือเหตุผลที่คุณมาที่นี่เพื่อขอคำอธิบายง่ายๆ ใช่?

คำตอบแบบไม่มีศัพท์แสงสั้น ๆ :

  1. คำอธิบายเบื้องต้นจำนวนมากกระโดดเข้าสู่ตัวอย่าง "โลกแห่งความจริง OOP" อย่างรวดเร็ว สิ่งเหล่านี้มีแนวโน้มที่จะสับสนมากกว่าความช่วยเหลือดังนั้นอย่าลังเลที่จะเพิกเฉยในตอนนี้
  2. คุณสามารถคิดว่าซอร์สโค้ดเป็นเพียง "ชิ้นส่วน" ของฟังก์ชันการทำงานที่เพิ่งบันทึกลงในไฟล์แต่ละไฟล์
  3. มีหลายวิธีในการจัดระเบียบ "ชิ้น" เหล่านั้น ขึ้นอยู่กับสิ่งต่างๆเช่นแบบแผนของภาษาการเขียนโปรแกรมภูมิหลังและการฝึกอบรมของนักพัฒนาหรือเพียงแค่ความชอบส่วนตัวแบบเก่า ๆ
  4. OOP และการเขียนโปรแกรมขั้นตอนเป็นเพียงสองวิธีหลักที่เป็นที่รู้จักโดยทั่วไปสำหรับวิธีการจัดระเบียบและจัดเรียง "ส่วน" ของโค้ดเหล่านั้น

คำตอบที่ไม่มีศัพท์แสงยาว:

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

ความเข้าใจของคุณจะเติบโตขึ้นเมื่อคุณเรียนรู้ภาษาโปรแกรมเชิงวัตถุอื่น ๆซึ่ง PHP เป็น "เด็กใหม่ในบล็อก"

นี่คือภาพรวมโดยย่อของสิ่งที่คุณจะได้เรียนรู้เมื่อคุณสร้างประสบการณ์:

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

    • เมธอดเป็นเพียงฟังก์ชันที่เกี่ยวข้องกันอย่างมีเหตุผลในลักษณะที่มีความหมาย คำว่า "method" และ "function" เป็นคำศัพท์ที่แตกต่างกันสองคำสำหรับสิ่งเดียวกัน
    • คุณสมบัติเป็นเพียงค่าข้อมูลที่เกี่ยวข้องกับคลาส ค่าเหล่านี้เป็นค่าที่ไม่ได้แยกโดยเจตนาให้กับแต่ละฟังก์ชันเนื่องจากฟังก์ชันมากกว่าหนึ่งฟังก์ชันในคลาสควรเข้าถึงได้
      • ตัวอย่างเช่นหากชั้นเรียนของคุณมีวิธีการมากมายในการทำดาราศาสตร์คุณสมบัติของชั้นเรียนอาจเป็นค่าของตัวเลขที่มีชื่อเสียงบางอย่างที่วิธีการทางดาราศาสตร์ทั้งหมดจำเป็นต้องรู้ (เช่น Pi ความเร็วของแสงระยะห่างระหว่างดาวเคราะห์ที่เฉพาะเจาะจง ฯลฯ ).
    • นี่คือที่มากที่สุดคำอธิบาย OOP ได้รับสับสนเพราะพวกเขาสาขาออกเป็น" ตัวอย่างที่โลกแห่งความจริง " ซึ่งสามารถได้รับการปิดหัวข้อ บ่อยครั้ง "โลกแห่งความเป็นจริง" เป็นคำสละสลวยสำหรับมุมมองทางภววิทยาของบุคคลใดบุคคลหนึ่ง นั่นมีแนวโน้มที่จะมีประโยชน์ก็ต่อเมื่อคุณเข้าใจแนวคิดนี้ดีพอที่จะสอนให้คนอื่นรู้แล้ว
    • หากต้องการทำความเข้าใจ OOP โดยไม่สับสนในตอนนี้คุณสามารถข้ามตัวอย่าง "โลกแห่งความจริง" ไปก่อนได้และมุ่งเน้นไปที่โค้ด คลาสเป็นเพียงวิธีการจัดเก็บฟังก์ชัน (วิธีการที่เรียกว่า) และคุณสมบัติ (หรือที่เรียกว่าข้อมูล) เป็นโค้ด PHP ใน "กลุ่ม" ที่เกี่ยวข้องอย่างน้อยหนึ่งชิ้นโดยแต่ละ "กลุ่ม" จะเกี่ยวข้องกับหัวข้อหรือฟังก์ชันเฉพาะ นั่นคือทั้งหมดที่คุณต้องรู้เพื่อเริ่มต้น
  • คลาสมีประโยชน์เพราะช่วยให้คุณสามารถจัดระเบียบโค้ดของคุณในระดับที่สูงมากในลักษณะที่ทำให้คุณเข้าใจใช้งานและดูแลรักษาได้ง่าย

  • เมื่อใครบางคนได้เขียนจำนวนมากของฟังก์ชั่นและการจัดการพวกเขาเป็นจำนวนมากของการเรียนและอากาศเหล่านั้นเพื่อร่วมกันทำงานในบางวิธีที่เย็นพวกเขาแพคเกจสิ่งที่ทั้งร่วมกันและเรียกมันว่าเป็น "กรอบ"
  • เฟรมเวิร์กเป็นเพียง "การแบ่งส่วน" ระดับสูงสุดถัดไป (รวมถึงรูปแบบการเข้ารหัสและอนุสัญญา) ที่ผู้คนตั้งแต่หนึ่งคนขึ้นไปเห็นด้วยเพราะพวกเขาชอบวิธีการจัดระเบียบโค้ดและเหมาะสมกับรูปแบบการทำงานความชอบค่านิยมแผนการสำหรับโลกของพวกเขา การปกครอง ฯลฯ

ดูสิ่งนี้ด้วย


1
@dreftymac: คุณสามารถให้ข้อเสนอแนะเกี่ยวกับสิ่งที่สามารถปรับปรุงได้ในส่วนเพิ่มเติมของฉันแทนที่จะลบทิ้งไว้ด้านหลังอย่างเชื่องช้า จริงๆ. ฉันยินดีรับฟังคำวิจารณ์ที่สร้างสรรค์และขอเชิญชวนให้คุณทำเช่นเดียวกัน
Flavius

1
@ Flavius ​​ตกลง ขอบคุณสำหรับความพยายามและสละเวลาสักครู่เพื่อทำการเพิ่มเติม หลังจากคิดแล้วก็ดูสมเหตุสมผลที่การเพิ่มที่คุณได้ทำไว้จะได้รับคำตอบแบบสแตนด์อะโลนของตัวเอง
dreftymac

2
หนึ่งนอกจากนี้: คลาสยังมีประโยชน์สำหรับการรวมข้อมูลฟังก์ชันเข้าด้วยกันดังนั้นคุณจึงไม่ต้องส่งผ่านพารามิเตอร์ไปรอบ ๆ
chiborg

1
+1 โดยเฉพาะสำหรับคำจำกัดความของ "Framework" ฉันเคยได้ยินหลายคนพยายามอธิบายว่ากรอบคืออะไรและฉันคิดว่าของคุณเข้าใจง่ายที่สุด
TecBrat

1
เพื่อน ... นี่คือคำอธิบายที่ดีที่สุดที่ฉันได้อ่านเกี่ยวกับ oop vs ขั้นตอนและฉันได้อ่าน A LOT! งานที่ยอดเยี่ยมมีประสิทธิภาพเรียบง่ายและตรงประเด็น คุณเป็นคนที่ใช่มักจะใช้ตัวอย่างในโลกแห่งความเป็นจริงและมันไม่ใช่วิธีที่ง่ายในการทำความเข้าใจอะไรเลยมันเป็นเรื่องไร้สาระ!
thechrishaddad

25

OOP ไม่มีอะไรมากไปกว่ารูปแบบการออกแบบ หากคุณเพิ่งเริ่มต้นให้เรียนรู้พื้นฐานโดยมุ่งเน้นไปที่วิธีการขั้นตอน สิ่งสำคัญที่สุดคือทำความคุ้นเคยกับหลักการพื้นฐานเช่นลูปเงื่อนไขและการเรียกขั้นตอนอื่น ๆ

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

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

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


3
ฉันพบว่ารหัส OOP บางอย่างดูสับสนมากขึ้น .. ลองมองเข้าไปในส่วนท้องของ prestashop เช่น
AndrewC

จุดที่ดีเกี่ยวกับ Pretashop Magento เป็นสัตว์ร้ายตัวหนึ่ง แต่เราตัดสินใจที่จะอยู่กับมันเพราะทางเลือกอื่นเช่น Pretashop หรือ WooComm นั้นแย่ยิ่งกว่า
PKHunter

7

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

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


6

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


6

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

คำตอบง่ายๆคือคุณต้องรู้และเข้าใจ php สามารถเรียนรู้ได้ที่ php.net เมื่อคุณเข้าใจแล้วคุณสามารถเริ่มจัดระเบียบรหัสของคุณเป็น chucks

รหัสขั้นตอนใช้ฟังก์ชันตัวแปร

เมื่อคุณได้รับสิ่งต่างๆคุณสามารถเริ่มจัดระเบียบฟังก์ชันและตัวแปรในชั้นเรียนได้ เราเริ่มเรียกฟังก์ชันเป็นวิธีการและตัวแปรเป็นคุณสมบัติ

โชคดี.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.