การสร้างตัวแปรในภาษา PHP ไม่จำเป็นต้องบอกชนิดของตัวแปรนั้นๆ เพียงแค่กำหนดค่าให้ตัวแปร ตัวแปรนั้นๆ ก็จะถูกประกาศ (cast) ให้เป็นชนิดตามข้อมูลที่ได้กำหนดเข้าไป (งง ไหมเนี่ย)
ภาษา PHP พัฒนามาจากภาษา C จึงมีชนิดข้อมูลที่คล้ายกัน แต่ได้ตัดชนิดข้อมูลที่ซ้ำซ้อนกันออกไป จนเหลือชนิดข้อมูล 3 ชนิดใหญ่ 7 ชนิดย่อย ดังนี้
ชนิดข้อมูลกลุ่มแรก สามารถเก็บได้เพียงข้อมูลเดียว (Scalar Datatypes)
เป็นชนิดข้อมูลที่เก็บค่าไว้ได้เพียงชนิดเดียว มีทั้งหมด 4 ชนิดคือ
Boolean เก็บข้อมูลเพียง 2 ค่าคือ true กับ false เท่านั้น ใช้ในคำสั่งเปรียบเทียบ เพื่อเลือกเส้นทางการทำงานของโปรแกรม และตัวแปรทุกๆ ตัว ถือว่าเป็นตัวแปรชนิด Boolean ด้วยเหมือนกัน ถ้าหากนำไปใช้ในคำสั่งเปรียบเทียบ จะได้ค่าที่เป็น true กลับมาทั้งหมด ยกเว้นตัวแปรที่เก็บค่า 0 เท่านั้น จะได้ค่าเป็น false
<?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 เข้าไปข้างหน้าตัวเลขชุดนั้น
<?php 42 // decimal -234034 // decimal 0436 // octal 0x7ABF // hexadecimal 123e10 // decimal ?>
แล้วถ้าเราใส่เลข 8 และ 9 ในตัวเลขที่เป็นฐานแปด เช่น 0899 ผลลัพธ์ที่ได้จะเป็นอะไร?
*** ค่า Integer ในภาษา PHP จะเก็บค่าได้สูงสุดตั้งแต่ -231 ถึง 231 ***
Float หรือจำนวนจริง (หนังสือบางเล่มจะเขียนว่า Double) ตัวเลขทุกตัวที่มีทศนิยมไม่ว่าจะเป็นบวกหรือลบจะถือว่าเป็นจำนวนจริงทั้งหมด
<?php // ทุกตัวเป็น Float 1.23456 4.00 11.3e4 11.22e+20 ?>
String เป็น ข้อความ หรือ ตัวอักษร ในภาษา PHP ไม่มีตัวแปรแบบ char เพราะฉะนั้น ข้อความทุกข้อความ จะถือว่าเป็น string ทั้งหมด ตัวแปร string จะถูกกำหนดอยู่ภายใน ‘ (single quote) หรือ ” (double quote) ก็ได้
<?php // ทุกตัวเป็น string หมด "hello world" 'cmdevhub\n' "123&%$abc^" ?>
นอกจากนี้เรายังสามารถเข้าถึงตัวอักษรภายใน string ได้โดยมองตัวแปร string นั้นเป็น array ตัวหนึ่ง และเข้าถึงข้อมูลภายในโดยการอ้างตัวแปรแบบ array
<?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 ไปจนหมดข้อมูลอาเรย์ ตัวอย่างการสร้างอาเรย์
<?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 ก็ได้ เช่น
<?php $a = array(); // ประกาศตัวแปรอาเรย์ $a[] = "PHP"; $a[] = "ASP"; $a[] = "JSP"; // ตัวแปร $a จะเก็บค่าโดยเริ่มจากหมายเลข index 0 เป็นต้นไป และสร้างหมายเลข index ขึ้นมาโดยอัตโนมัติ echo $a[2]; // ผลลัพธ์ JSP ?>
อาเรย์แบบจับคู่ หรือ Associative Array ตามปกติ key ที่ใช้อ้างอิงอาเรย์จะเป็นตัวเลข 0 ไปจนถึงตัวสุดท้ายของอาเรย์ แต่เราสามารถใช้ข้อความมาเป็น key เพื่ออ้างอิงค่าในอาเรย์นั้นๆ ได้ ลองดูตัวอย่างเลยครับ
<?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 ตัวมาต่อกัน เท่านั้นเองครับ ไม่ยากเลย ลองดูจากตัวอย่างล่ะกันครับ
<?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 ?>
เราสามารถผสมตัวแปรอาเรย์แบบจับคู่เข้ากับอาเรย์ธรรมดา หรืออาเรย์แบบจับคู่เข้ากับอาเรย์แบบจับคู่ก็ได้เช่นกัน เช่น
<?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 เดี๋ยวมาเขียนต่อ ====