error ในการเขียนเว็บ และการแก้ไข

error ในการเขียนเว็บ และการแก้ไข

วันนี้เอาประสบการณ์มาเล่าให้ฟัง สำหรับคนที่เป็นมือใหม่ถึงระดับกลางน่าจะได้ประโยชน์อยู่พอสมควร

ในอุตสาหกรรม soft ware โดยเฉลี่ยจะมี error ปรากฏขึ้น จำนวน 10-15 error ต่อโค้ดที่เขียน 1,000 บรรทัด ผมยังไม่เจอใครที่เขียนโค้ดและไม่มี bug เลยในรอบเดียวจบ ไม่ว่าจะเป็นคนเก่งแค่ไหนก็ตาม ดังนั้น เราที่ไม่ได้เป็นมือ programming ระดับจักรวาล(โลกมันน้อยไป) ก็ย่อมเจอ error หรือ bug เป็นปกติแน่นอนอยู่แล้ว แต่ทีนี้ ปัญหาคือ เราจะจัดการกับ error หรือ bug เหล่านั้นได้อย่างไร

เท่าที่ผมเจอคนส่วนใหญ่ และคิดว่าเป็นปัญหาที่ต้องปรับมุมมอง ก็คือ เค้ามักจะเพิกเฉยกับ error คือไม่ใส่ใจว่ามัน error อะไร จะพยายามหาทางปิดมันให้ได้ก็พอ(ทั้งที่เป็นการกวาดขยะซ่อนใต้พรมนั่นเอง) หรือ จะเป็นคนที่เจอ error แล้วทำอะไรไม่ถูก ไม่อ่าน ไม่ทำความเข้าใจว่ามัน error อะไร คอยแต่จะถามคนอื่นเอาอย่างเดียว หรืออีกคนที่หนักเลยก็คือ ทำแล้ว error ก็ไม่ทำเลย ถอยกลับไปเอาแค่จุดก่อน error ก็พอ แล้วเปลี่ยนไปทำแบบอื่นทั้งที่ยังไม่ได้แก้เลย

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

PHP Notice:  Undefined variable: test in /home/newbot/test.php on line 4

error ตัวบนเค้ากล่าวว่า ไม่มีการประกาศตัวแปร ที่ชื่อ test แล้วมีการเรียกใช้เลย ในไฟล์ /home/newbot/test.php ที่บรรทัดที่ 4

PHP Parse error:  syntax error, unexpected T_ECHO, expecting ',' or ';' in /home/newbot/test.php on line 4

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

PHP Notice:  Use of undefined constant id - assumed 'id' in /home/newbot/test.php on line 3

error ตัวนี้ บอกว่า ไม่พบการประกาศตัวแปรที่ชื่อ id ดังนั้น จึงแปลงให้เป็น 'id' พร้อมไฟล์และบรรทัด สำหรับ error ตัวนี้เกี่ยวข้องกับหลายส่วน โดยผมเขียนโค้ดตัวอย่างว่า echo $test[id]; ในความเข้าใจของ PHP เป็นการเขียนตัวแปร array ที่ชื่อ $test ซึ่งมีการชี้ index โดยอ้างอิงค่าที่เก็บใน constant ที่ชื่อ id ซึ่งถ้า id เก็บ me ก็จะได้ว่า echo $test['me']; นั่นเอง ทั้งๆที่เราต้องใจจะเขียนว่า echo $test ที่มี index ชื่อว่า id แสดงว่ามันไปคนละทิศละทางเลย เพราะว่าข้อกำหนดของ การเรียกใช้ตัวแปร array คือ ต้องใส่เครื่องหมาย '' ครอบ index เสมอ(ถ้าไม่ใช้การอ้างอิง) โดยที่ถูกต้องก็คือ echo $test['id']; นั่นเอง

PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/newbot/test.php:2) in /home/newbot/test.php on line 3

เป็น error ยอดฮิตติดลมบนอีกตัวเหมือนกัน error ตัวนี้ เกี่ยวข้องกับการเรียกใช้กลุ่มคำสั่งของ header เช่น header(); session_start(); และอื่นๆที่ทำในระดับ header ของการประมวลผล php โดยมีข้อกำหนดง่ายๆว่า ห้ามมีการแสดงผลตัวหนังสือใดๆ ทั้งที่มองเห็นและไม่เห็น ก่อนการเรียกใช้งาน คำสั่งกลุ่มนี้ เท่าที่ผมเห็นบ่อยๆ ก็คือการ เคาะ space bar ก่อนการเปิด <?php หรือ <? ก็ error แน่นอน กับอีกแบบก็คือการ เรียกการแสดงผลส่วน header ขึ้นมาก่อน (ใช้แบบ include) แน่นอนว่า ตัวหนังสือเพียบ ไฟล์ที่ทำงานก็ทำไม่ได้ เพราะว่า error ไปแล้วเนื่องจากปรากฏตัวหนังสือ หรืออีกแบบที่จะเจอก็คือการ สั่ง print หรือ echo javascript ออกมา ซึ่งไม่รู้ใครเค้าสอนกันมา เพราะว่าผมไม่เคยใช้แบบนั้นเลย javascript ที่ไหนกัน สั่ง print ก่อนเปิด <html> มักง่ายไปหน่อยล่ะมั้ง ใครยังทำอยู่ก็แก้ไขนะครับ

ทั้งหมดนี้ถ้าสังเกตุก็จะเห็นว่ามันไม่ได้น่ากลัวอะไร อีกทั้งมันยังช่วยบอกความผิดพลาดเราอีกด้วย ละเอียดทั้งชื่อไฟล์ และบรรทัดอีกต่างหาก แต่มีบางคนที่หัวหมอ ไปสั่งปิดการแสดง error เช่น notice, warning หรือบางคนหนักกว่า ปิด error ด้วย ยิ่งแย่เลย เพราะว่าคุณจะต้องทำงานภายใต้ bug ที่แฝงตัวเงียบๆอีกเป็นจำนวนมาก อาจจะเจอเหตุผีหลอกได้ เช่น echo $test[id] ที่ต้องได้ 1 แต่ได้ 2 เป็นต้น รับรองแก้กันเหนื่อยกว่าเดิมอีกครับ

ดังนั้น ถ้าอยากทำงานให้ไม่มี error มากนักพยายามศึกษา ไวยากรณ์ php ให้แม่นๆหน่อย และลองทำตามไปด้วยก็จะดีจะได้แม่นขึ้น รวมทั้งเวลามี error ก็อ่านมันหน่อย ว่ามันคืออะไร พยายามหาเหตุผลให้มันให้ได้ว่าเพราะอะไร เราก็จะแก้ได้ เพราะว่า error ของจริงยังมีอีกเยอะกว่านี้มาก นี้แค่ sample เท่านั้นเอง

Create: Modify : 2011-10-20 14:00:03 Read : 9291 URL :