ข้อผิดพลาด 8 ข้อที่ทำให้เกิด Error บ่อยๆ

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

มีอะไรบ้าง?

  • เครื่องหมายอัฒภาค (semicolon ; ) หายไป
  • เครื่องหมายเท่ากับ (= หรือ ==)
  • การพิมพ์ชื่อตัวแปรผิด
  • เครื่องหมายดอลล่าร์ที่หายไป
  • เครื่องหมายอัญประกาศ
  • ฟังค์ชั่นพิเศษ
  • ทำงานกับอะเรย์
  • เครื่องหมายปิดเปิดไม่ครบ

เครื่องหมายอัฒภาค (semicolon ; ) หายไป

การทำงานของ php จะคล้ายกับภาษาจำพวก Java ที่ถือว่าการขึ้นบรรทัดใหม่ ไม่ใช่จุดสิ้นของคำสั่งที่เรียกใช้งาน เมื่อเราต้องการบอก php ว่าคำสั่งนี้สิ้นสุดแล้ว ก็จะต้องใช้เครื่องหมายอัฒภาค ซึ่งในบางโอกาสเราก็ลืมได้ง่าย เช่นการขึ้นบรรทัดใหม่เลยโดยที่ไม่ได้ใช้เครื่องหมาย ; ต่อท้ายบรรทัดก่อนหน้า

เครื่องหมายเท่ากับ

เหตุการณ์นี้เกิดขึ้นกับผมค่อนข้างบ่อย โดยเฉพาะเวลาที่เราใช้ร่วมกับ if เช่น…

<?
if($foo = 'bar')
{
      echo 'equal';

}
?>

ในกรณีด้านบน ไม่ว่าในตัวแปร $foo จะมีอะไร เราก็จะได้ equal ออกมาตลอด เพราะอะไรหรือ?
ในส่วนของข้อกำหนดของ if เราได้ใส่ $foo = ‘bar’ เอาไว้ ซึ่งการใช้เครื่องหมายเท่ากับเพียงอันเดียว เป็นการนำข้อมูลที่อยู่ทางด้านขวา ใส่ลงไปในด้านซ้ายของเครื่องหมายเท่ากับ และในกรณีแบบนี้ ในส่วนของ if ก็จะได้ค่าเป็น TRUE เสมอ เพราะเราสามารถใส่ข้อความลงไปในตัวแปร $foo ได้ มันจึงขึ้นข้อความ equal ออกมาตลอด ถึงแม้ว่า $foo จะไม่เท่ากับ bar
สคริปต์ที่ถูกต้อง จะต้องใช้ $foo == ‘bar’ ซึ่งเป็นเหมือนการถามว่า $foo มีค่าเป็น bar หรือไม่ ถ้าไม่ มันก็จะคืนค่าเป็น FALSE และเมื่อ $foo ไม่เท่ากับ bar มันก็จะไม่แสดงผลลัพธ์ เพราะฉะนั้น ระวังว่าการใช้เครื่องหมายเท่ากับในกรณีไหน ต้องใช้กี่ตัว หากเป็นการกำหนดค่าให้กับตัวแปร ก็ใช้ = ครั้งเดียว แต่ถ้าเป็นการเปรียบเทียบ ต้องเป็น ==

การพิมพ์ชื่อตัวแปรผิด

เนื่องจาก php จะประมวลผลในแบบ case-sensitive ซะส่วนใหญ่ เราจึงต้องมีความระมัดระวังในเรื่องของการใช้ตัวเล็กตัวใหญ่เวลาตั้งชื่อ
$testVariable เป็นคนละตัวแปรกับ $testvariable

เครื่องหมายดอลล่าร์ที่หายไป

เคยบ้างไหมเวลาที่เราลืมตัว แล้วลืมพิมพ์เครื่องหมาย $ ด้านหน้าตัวแปร ซึ่งทำให้ php เกิด error ขึ้นได้ ถ้ามันเป็น constant ก็ว่าไปอีกเรื่องหนึ่ง แต่ถ้าหากเป็นตัวแปร จะต้องมี $ อยู่ด้านหน้าชื่อตัวแปรเสมอ

เครื่องหมายอัญประกาศ

การกำหนดข้อความให้เป็น string ใน php มีอยู่สองแบบ คือการล้อมรอบข้อความด้วย ‘ ขีดเดียว หรือ ” แบบสองขีด ซึ่งจะให้ความหมายค่อนข่างต่างกัน
ในส่วนของ ‘ ขีดเดียว เราจะไม่สามารถใส่ escape character ได้ และไม่มีความจำเป็นที่จะต้อง escape ตัวอักษรจำพวก t n ฯลฯ แต่ถ้าหากคุณต้องการเชื่อมตัวแปรกับเข้ากับข้อความ ก็จะต้องมีการปิดเครื่องหมายก่อน แล้วตามด้วยเครื่องหมายเชื่อมข้อความ นั่นคือ . เช่น…

<?
$foo = 'bar ' . $text . ' bar';

?>

แต่ เมื่อคุณใช้ ” สองขีด หากคุณต้องใช้เครื่องหมายจำพวก /n แต่ไม่ต้องการให้เป็นการขึ้นบรรทัดใหม่ การใส่เครื่องหมายคำพูดลงในข้อความ ก็จะต้องมีการ escape ก่อน
ใส่ / ไว้ที่ด้านหน้าของตัวอักษรที่ต้องการ escape เช่น ใช้ /” แทน ” ธรรมดา

ฟังค์ชั่นพิเศษ

ฟังค์ชั่นบางอย่าง อาจจะมีความต้องการมากกว่าฟังค์ชั่นทั่วๆไป เช่น บางฟังค์ชั่นจะใช้ได้ก็ต่อเมื่อเราลง library เพิ่ม เช่นการใช้งาน GD หากเราไม่ได้ลงไว้ แต่เรียกใช้ฟังค์ชั่น มันก็จะขึ้น error
ฟังค์ชั่นอีกจำพวกนึงที่มีความต้องการพิเศษ ก็จำพวก header() ที่จะต้องใช้ในส่วนบนสุดของไฟล์ เช่น

<?

header("Location: http://www.21nu.net");
?>

โค๊ด ด้านบนจะเห็นได้ว่ามีบรรทัดว่างๆอยู่ก่อนหน้าที่เราจะเปิด <? ซึ่งจะทำให้เกิด error ทันที เพราะ header จะต้องอยู่ส่วนบนสุด ห้ามไม่ให้มีข้อความใดๆถูกส่งไปก่อน ถึงแม้ว่าจะเป็นช่องว่างก็ตาม โค๊ดที่ทำงานได้จะต้องเป็นดังนี้…

<?
header("Location: http://www.21nu.net");
?>

ทำงานกับอะเรย์

การนับเลขในอะเรย์ เริ่มจาก 0 เสมอ ไม่ใช่หนึ่ง เช่น

<?
$foo = array("apple", "banana", "coconut");
?>

หากเราต้องการเรียกใช้ apple ก็จะต้องเรียก $foo[0] หากเรียก $foo[1] ก็จะได้ banana ครับ

เครื่องหมายปิดเปิดไม่ครบ

เมื่อเราต้องใช้ control structures บวกกับฟังค์ชั่นอื่นๆหลายๆอัน อาจทำให้เกิดความสับสน และปิดวงเล็บไม่ครบด้วย จึงต้องระวังเอาไว้ นับวงเล็บเปิดกับปิดให้ดี

<?
if(isset($foo)
{
       echo '$foo is set';
} else {

      for($i=0;$i < 5; $i++)
      {
             echo '$foo is not set';

}
?>

หาเจอหรือไม่ ว่าปิดไม่ครบตรงไหนบ้าง

3 คิดบน “ข้อผิดพลาด 8 ข้อที่ทำให้เกิด Error บ่อยๆ

  1. เหอะ ส่วนตัวผมจะมีข้อผิดพลาดมากกว่านี้อีกคับ เขียนฟังชั่นแล้วลืมสั่งให้มันทำงานหนะ เหอๆ บ่อยมากๆ

    ว่่าแต่ คิดถึง try2hack จังคับ เว็บผู้มีพระคุณ ถ้าไม่มี try2hack ก็ไม่มีผมวันนี้อ่ะ อย่าทิ้งนะคับ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s