การสร้างตัวแปรในภาษา PHP ไม่จำเป็นต้องบอกชนิดของตัวแปรนั้นๆ เพียงแค่กำหนดค่าให้ตัวแปร ตัวแปรนั้นๆ ก็จะถูกประกาศ (cast) ให้เป็นชนิดตามข้อมูลที่ได้กำหนดเข้าไป (งง ไหมเนี่ย)
ภาษา PHP พัฒนามาจากภาษา C จึงมีชนิดข้อมูลที่คล้ายกัน แต่ได้ตัดชนิดข้อมูลที่ซ้ำซ้อนกันออกไป จนเหลือชนิดข้อมูล 3 ชนิดใหญ่ 7 ชนิดย่อย ดังนี้
ชนิดข้อมูลกลุ่มแรก สามารถเก็บได้เพียงข้อมูลเดียว (Scalar Datatypes)
เป็นชนิดข้อมูลที่เก็บค่าไว้ได้เพียงชนิดเดียว มีทั้งหมด 4 ชนิดคือ
Boolean เก็บข้อมูลเพียง 2 ค่าคือ true กับ false เท่านั้น ใช้ในคำสั่งเปรียบเทียบ เพื่อเลือกเส้นทางการทำงานของโปรแกรม และตัวแปรทุกๆ ตัว ถือว่าเป็นตัวแปรชนิด Boolean ด้วยเหมือนกัน ถ้าหากนำไปใช้ในคำสั่งเปรียบเทียบ จะได้ค่าที่เป็น true กลับมาทั้งหมด ยกเว้นตัวแปรที่เก็บค่า 0 เท่านั้น จะได้ค่าเป็น false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $foo = true; // จริง $foo = false; // เท็จ $foo = 1; // จริง $foo = -1; // จริง $foo = "hello" ; // จริง $foo = 0; // เท็จ // เพื่อนๆ ว่าโค๊ดข้างล่างนี่ จะรันได้หรือไม่ และผลลัพธ์จะเป็นยังไงครับ? $foo = "hello" ; if ( $foo ) { echo "TRUE" ; } else { echo "FALSE" ; } ?> |
Integer หรือ จำนวนเต็ม ถ้าหากกำหนดข้อมูลที่มีเลขทศนิยม ตัวแปรนั้นๆ จะถูกประกาศให้เป็น Float โดยอัตโนมัติ ตัวแปรชนิดจำนวนเต็มสามารถเก็บข้อมูลได้ทั้งบวกและลบตามเลขฐาน 3 ชนิดคือ
- ฐานสิบ (Decimal) กำหนดตัวเลขเข้าไปตรงๆ เลย เป็นเลขฐานที่คนคุ้นเคยมากที่สุด
- ฐานแปด (Octal) เติมเลข 0 เข้าไปข้างหน้าตัวเลขชุดนั้นก่อน
- ฐานสิบหก (Hexadecimal) เติม 0x เข้าไปข้างหน้าตัวเลขชุดนั้น
1 2 3 4 5 6 7 | <?php 42 // decimal -234034 // decimal 0436 // octal 0x7ABF // hexadecimal 123e10 // decimal ?> |
แล้วถ้าเราใส่เลข 8 และ 9 ในตัวเลขที่เป็นฐานแปด เช่น 0899 ผลลัพธ์ที่ได้จะเป็นอะไร?
*** ค่า Integer ในภาษา PHP จะเก็บค่าได้สูงสุดตั้งแต่ -231 ถึง 231 ***
Float หรือจำนวนจริง (หนังสือบางเล่มจะเขียนว่า Double) ตัวเลขทุกตัวที่มีทศนิยมไม่ว่าจะเป็นบวกหรือลบจะถือว่าเป็นจำนวนจริงทั้งหมด
1 2 3 4 5 6 7 | <?php // ทุกตัวเป็น Float 1.23456 4.00 11.3e4 11.22e+20 ?> |
String เป็น ข้อความ หรือ ตัวอักษร ในภาษา PHP ไม่มีตัวแปรแบบ char เพราะฉะนั้น ข้อความทุกข้อความ จะถือว่าเป็น string ทั้งหมด ตัวแปร string จะถูกกำหนดอยู่ภายใน ‘ (single quote) หรือ ” (double quote) ก็ได้
1 2 3 4 5 6 | <?php // ทุกตัวเป็น string หมด "hello world" 'cmdevhub\n' "123&%$abc^" ?> |
นอกจากนี้เรายังสามารถเข้าถึงตัวอักษรภายใน string ได้โดยมองตัวแปร string นั้นเป็น array ตัวหนึ่ง และเข้าถึงข้อมูลภายในโดยการอ้างตัวแปรแบบ array
1 2 3 4 5 | <?php $str = "www.cmdevhub.com" ; echo $str [0]; // ได้ตัว w echo $str [6]; // ได้ตัว d ?> |
ชนิดข้อมูลกลุ่มที่สอง เก็บข้อมูลได้หลายๆ แบบในตัวเดียวกัน (Compound Datatypes)
เป็นตัวแปรที่เก็บข้อมูลได้หลายๆ ค่าในตัวแปรตัวเดียวมี 2 ชนิดคือ
Array (อาเรย์) เป็นชุดข้อมูลที่มีค่าหลายๆ ค่า ในตัวเดียว โดยไม่จำเป็นต้องเป็นข้อมูลชนิดเดียวกัน หมายความว่าเราสามารถเก็บข้อมูล Integer, Float, String ไว้ในตัวแปรตัวเดียวกันได้ โดยใช้เครื่องหมาย […] และมี key เป็นตัวแยกชุดข้อมูลนั้นๆ
ตัวแปรอาเรย์ใน PHP จะแบ่งเป็น 2 ชนิดใหญ่ๆ คือ อาเรย์ธรรมดา และ อาเรย์แบบจับคู่ (Associative Array)
อาเรย์ธรรมดา ก็คืออาเรย์แบบทั่วๆ ไปนี่แหละครับ จะอ้างอิงโดยใช้ key เป็นหมายเลขตาม index ตัวแปรอาเรย์เริ่มจากเลข 0 ไปจนหมดข้อมูลอาเรย์ ตัวอย่างการสร้างอาเรย์
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $a = array (); // ประกาศตัวแปรว่าเป็น อาเรย์ $a [0] = "PHP" ; $a [1] = "ASP" ; $a [2] = "JSP" ; $a [3] = "Python" ; $a [4] = "Ruby" ; // เราสามารถเข้าถึงอาเรย์ได้โดยใช้หมายเลข index เป็นตัวอ้างอิง echo $a [0]; // ผลลัพธ์ PHP echo $a [4]; // ผลลัพธ์ Ruby ?> |
ใน PHP เราสามารถกำหนดค่าในอาเรย์โดยไม่ต้องกำหนด index ก็ได้ เช่น
1 2 3 4 5 6 7 8 9 10 | <?php $a = array (); // ประกาศตัวแปรอาเรย์ $a [] = "PHP" ; $a [] = "ASP" ; $a [] = "JSP" ; // ตัวแปร $a จะเก็บค่าโดยเริ่มจากหมายเลข index 0 เป็นต้นไป และสร้างหมายเลข index ขึ้นมาโดยอัตโนมัติ echo $a [2]; // ผลลัพธ์ JSP ?> |
อาเรย์แบบจับคู่ หรือ Associative Array ตามปกติ key ที่ใช้อ้างอิงอาเรย์จะเป็นตัวเลข 0 ไปจนถึงตัวสุดท้ายของอาเรย์ แต่เราสามารถใช้ข้อความมาเป็น key เพื่ออ้างอิงค่าในอาเรย์นั้นๆ ได้ ลองดูตัวอย่างเลยครับ
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $capital = array (); $capital [ "thailand" ] = "bangkok" ; $capital [ "japan" ] = "tokyo" ; $capital [ "uk" ] = "london" ; $capital [ "usa" ] = "washington" ; // เราสามารถอ้างถึงข้อมูลในอาเรย์ได้โดยใช้ชื่อประเทศเลย echo $capital [ "thailand" ]; // ไ้ด้ bangkok echo $capital [ "japan" ]; // ได้ tokyo ?> |
แล้วถ้าอ้างอิงโดยใช้ัคำว่า Thailand แทนคำว่า thailand ล่ะ? ก็จะเจอคำเตือนว่า ไม่พบ index นี้
Notice: Undefined index: Thailand in C:\www\cmdevhub\array.php on line 10
เพราะฉะนั้น การอ้างอิงอาเรย์แบบจับคู่ ตัวอักษรเล็กหรือใหญ่ ถือว่าเป็นคนละตัว เหมือนกับการอ้างอิงตัวแปรนะครับ ระวังไว้ด้วย
ข้อมูลอาเรย์ ยังสามารถกำหนดให้เป็นอาเรย์ซ้ำเข้าไปอีกได้ เป็นหลายๆ ชั้น (เรียกว่า มิติ (dimension)) แต่ที่ใช้กันมากที่สุดก็คงไม่พ้นอาเรย์ 1 มิติ นี่แหละครับ ส่วนอาเรย์ 2 มิติก็มีใช้กันบ้าง แต่ 3 มิตินี่ ตั้งแต่เขียนโปรแกรมมา ไม่เคยมีงานไหนที่ใช้เลย นอกจากงานทำส่งอาจารย์เท่านั้น
การสร้างอาเรย์ 2 มิติ จากตัวอย่างข้างต้น เป็นการสร้างอาเรย์ 1 มิติ หลักการในการสร้างอาเรย์ 2 มิติก็เหมือนกับอาเรย์ 1 มิติ 2 ตัวมาต่อกัน เท่านั้นเองครับ ไม่ยากเลย ลองดูจากตัวอย่างล่ะกันครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $a = array (); $a [0][] = "white" ; $a [0][] = "black" ; $a [0][] = "blue" ; $a [1][] = "banana" ; $a [1][] = "apple" ; // การอ้างอิงข้อมูลในอาเรย์ echo $a [0][1]; // ได้ผลลัพธ์ black echo $a [1][1]; // ได้ผลลัพธ์ apple ?> |
เราสามารถผสมตัวแปรอาเรย์แบบจับคู่เข้ากับอาเรย์ธรรมดา หรืออาเรย์แบบจับคู่เข้ากับอาเรย์แบบจับคู่ก็ได้เช่นกัน เช่น
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $country = array (); $country [ "thailand" ][ "north" ][] = "chiang mai" ; $country [ "thailand" ][ "north" ][] = "chiang rai" ; $country [ "thailand" ][ "north" ][] = "lamphun" ; $country [ "thailand" ][ "central" ][] = "bangkok" ; $country [ "thailand" ][ "central" ][] = "samut songkharm" ; // ถ้าต้องการแสดงจังหวัดในตัวแปร $country ต้องอ้างอิงดังนี้ echo $country [ "thailand" ][ "north" ][0]; // ได้ผลลัพธ์ chiang mai echo $country [ "thailand" ][ "central" ][0]; // ได้ผลลัพธ์ bangkok ?> |
เห็นไหมครับ ตัวแปรอาเรย์นั้น ไม่ยากเลย พยายามนึกภาพใหม่เหมือน “กล่อง” ที่วางเรียงต่อๆ กัน แล้วแต่ละกล่องก็มีชื่อเดียวกัน แต่มีลำดับที่ต่างกัน ถ้าเราต้องการนำของไปใส่ในกล่องไหน ก็อ้างอิงหมายเลขกล่องนั้น เพียงแต่เริ่มนับจากกล่องที่ 0 นะครับ
==== ยังขาด Object กับ Spcial datatype เดี๋ยวมาเขียนต่อ ====