ใน stackoverflow ฉันเห็นปัญหานี้หมดไปตลอดเวลา:
- E_NOTICE? == E_DEBUG หลีกเลี่ยง isset () และ @ พร้อม error_handler ที่ซับซ้อนยิ่งขึ้น
- วิธีการตั้งค่า PHP ไม่ให้ตรวจสอบการเลิกค้นหาดัชนีสำหรับ $ _GET เมื่อ E_NOTICE เปิดอยู่
- วิธีหยุด PHP จากการบันทึกข้อผิดพลาด PHP Notice
- ฉันจะปิดประกาศ PHP 5.3 ดังกล่าวได้อย่างไร
แม้แต่Pekka (ผู้ที่ให้คำแนะนำ PHP ที่เป็นของแข็งจำนวนมาก) ก็เจอกับE_NOTICEสัตว์ประหลาดที่หวั่นกลัวและหวังว่าจะได้ทางออกที่ดีกว่าการใช้isset(): isset () และเปล่า () ทำให้โค้ดน่าเกลียด
โดยส่วนตัวแล้วฉันใช้isset()และempty()ในหลาย ๆ ที่เพื่อจัดการการไหลของแอปพลิเคชันของฉัน ตัวอย่างเช่น:
public function do_something($optional_parameter = NULL) {
if (!empty($optional_parameter)) {
// do optional stuff with the contents of $optional_parameter
}
// do mandatory stuff
}
แม้แต่ตัวอย่างง่ายๆเช่นนี้:
if (!isset($_REQUEST['form_var'])) {
// something's missing, do something about it.
}
ดูเหมือนว่าฉันมีเหตุผลมาก ดูเหมือนว่ามันจะไม่บวมดูเหมือนรหัสที่เสถียร แต่จำนวนมากของนักพัฒนาไฟขึ้นการใช้งานของพวกเขาด้วยE_NOTICE's เปิดใช้งานการค้นพบจำนวนมากที่น่าผิดหวัง 'ดัชนีอาร์เรย์เตรียม' ประกาศแล้วแสยะที่คาดหมายของการตรวจสอบสำหรับตัวแปรที่กำหนดไว้และ 'เกลื่อน' isset()รหัสของพวกเขาด้วย
ฉันถือว่าภาษาอื่นจัดการสิ่งต่าง ๆ เมื่อพูดถึงประสบการณ์ JavaScript จะไม่สุภาพเท่า PHP โดยทั่วไปแล้วตัวแปรที่ไม่ได้กำหนดจะหยุดการทำงานของสคริปต์ นอกจากนี้ยังพูดจากไม่มีประสบการณ์ ) ฉันแน่ใจว่าภาษาเช่น C / C ++ จะปฏิเสธที่จะรวบรวม
ดังนั้น PHP devs ขี้เกียจแค่ไหน? (ไม่ได้พูดถึงคุณ Pekka ฉันรู้ว่าคุณกำลัง refactoring แอปพลิเคชันเก่า) หรือว่าภาษาอื่น ๆ จัดการกับตัวแปรที่ไม่ได้กำหนดอย่างสง่างามมากกว่าที่ต้องการให้โปรแกรมเมอร์ตรวจสอบก่อนว่าพวกเขาถูกกำหนดหรือไม่?
(ฉันรู้ว่ามีE_NOTICEข้อความอื่นนอกเหนือจากตัวแปรที่ไม่ได้กำหนด แต่ดูเหมือนว่าจะเป็นข้อความที่ทำให้เกิดความผิดหวังมากที่สุด)
ภาคผนวก
จากคำตอบจนถึงตอนนี้ฉันไม่ใช่คนเดียวที่คิดว่าisset()ไม่ใช่รหัสที่ขยายตัว ดังนั้นฉันสงสัยว่าตอนนี้มีปัญหากับโปรแกรมเมอร์ในภาษาอื่นที่สะท้อนสิ่งนี้หรือไม่? หรือนี่เป็นเพียงปัญหาทางวัฒนธรรมของ PHP เท่านั้น?