ฉันรู้ว่าฉันสามารถโยนข้อยกเว้นจากตัวสร้างใน PHP แต่ฉันควรทำอย่างไร ตัวอย่างเช่นหากค่าของพารามิเตอร์ไม่เป็นไปตามที่ฉันคาดไว้
หรือฉันควรเลื่อนการยกเว้นออกไปจนกว่าจะมีการเรียกใช้เมธอด ข้อดีและข้อเสียของทั้งสองกรณีคืออะไร
ฉันรู้ว่าฉันสามารถโยนข้อยกเว้นจากตัวสร้างใน PHP แต่ฉันควรทำอย่างไร ตัวอย่างเช่นหากค่าของพารามิเตอร์ไม่เป็นไปตามที่ฉันคาดไว้
หรือฉันควรเลื่อนการยกเว้นออกไปจนกว่าจะมีการเรียกใช้เมธอด ข้อดีและข้อเสียของทั้งสองกรณีคืออะไร
คำตอบ:
ทำไมคุณเลื่อนการยกเว้นออกไป
หากคุณรู้ว่าวัตถุนั้นไม่สามารถสร้างอินสแตนซ์ของพารามิเตอร์ที่กำหนดได้อย่างถูกต้องคุณควรทำการยกเว้น
มิฉะนั้นใครบางคนอาจทดสอบวัตถุของคุณเป็นโมฆะซึ่งไม่เป็นเช่นนั้นและอาจถือว่าทุกอย่างเป็นไปตามที่คาดไว้
มีหลายสิ่งหลายอย่างที่สามารถทำได้กับวัตถุของคุณโดยไม่ต้องเรียกวิธีการนั้น: มันอาจจะถูกเพิ่มเข้าไปในรายการมันอาจถูกเปรียบเทียบมันสามารถส่งเป็นพารามิเตอร์ ฯลฯ ฯลฯ สิ่งเหล่านี้ล้วนเป็นสิ่ง ที่ไม่ควรเกิดขึ้นเพราะมันไม่ใช่วัตถุที่ถูกต้อง
หากคอนสตรัคของคุณถูกเรียกใช้ด้วยพารามิเตอร์ที่ไม่ดีคุณควร (ต้อง?) แสดงข้อยกเว้น หากคุณไม่ทำเช่นนั้นคุณอาจได้รับวัตถุที่ไม่ดีซึ่งจะไม่ทำงานตามที่คาดไว้
แน่นอน !!
คุณควรโยนข้อยกเว้นหากพารามิเตอร์สำหรับการสร้างวัตถุไม่ถูกต้องหรือไม่เป็นไปตามสัญญา ไม่ใช่ความคิดที่ดีที่จะเดินไปข้างหน้าพร้อมกับการรับรู้ว่าวัตถุถูกสร้างขึ้นด้วยข้อมูลที่ไม่ดีซึ่งอาจทำให้เกิด ปัญหามากมายหากคุณอนุญาตให้ผู้โทรดำเนินการต่อไป
มันจะดีกว่าเสมอ"FAIL FAST and FAIL EARLY"
ฉันรู้ว่าฉันสามารถโยนข้อยกเว้นจากตัวสร้างใน PHP แต่ฉันควรทำอย่างไร
นั่นเป็นวิธีเดียวที่มีเหตุผลที่จะแจ้งว่าการก่อสร้างวัตถุล้มเหลว
ทำไมคุณไม่ตรวจสอบความถูกต้องของชุดพารามิเตอร์ก่อนที่จะทำให้วัตถุของคุณเป็นอินสแตนซ์ การทำเช่นนี้จะช่วยให้แน่ใจว่าวัตถุของคุณจะถูกสร้างขึ้นดังนั้นการลบด้านใด ๆ ที่มีผลกระทบที่อาจเกิดขึ้นจากความล้มเหลว
แม้ว่าฉันรู้ว่าคุณสามารถตรวจสอบสิ่งต่าง ๆ ในตัวสร้างและการโยนข้อยกเว้นของฉัน แต่ฉันชอบที่จะเขียนตัวสร้างของฉันในลักษณะที่พวกเขาจะไม่ล้มเหลว ฉันทำการตรวจสอบความถูกต้องพารามิเตอร์ก่อนที่จะสร้างอินสแตนซ์ออบเจกต์ซึ่งฉันสามารถโยนข้อยกเว้นโดยที่คอนสตรัคเตอร์ของฉันล้มเหลว โดยทั่วไปแล้วฉันไม่พยายามสร้างอินสแตนซ์ของวัตถุใหม่ในตัวสร้างของฉันเลือกที่จะสร้างอินสแตนซ์ตามที่ต้องการ
แค่ความเห็นของฉัน PHP ให้อิสระมากมาย - สนุกได้เลย!