ตัวแปรและประเภทข้อมูล
ตัวแปร
ตัวแปร คือสิ่งที่ใช้เก็บค่าของข้อมูลในหน่วยความจำ ตัวแปรจะประกอบไปด้วยชื่อของตัวแปร (identifier) ใช้เพื่ออ้างอิงหรือเข้าถึงค่าภายในตัวแปร ตัวแปรเก็บข้อมูลในหน่วยความจำ ดังนั้นเราสามารถเข้าถึงค่าของตัวแปรและอัพเดทค่าได้ตลอดเวลา
การประกาศตัวแปร
ในการประกาศตัวแปรในภาษา PHP คุณไม่ต้องกำหนดประเภทของตัวแปรเหมือนในภาษา C หรือภาษาอื่นๆ ที่เป็นภาษาประเภท typed language ซึ่งตัวแปรจะขึ้นต้นด้วยเครื่องหมายดอลลา $
และตามด้วยชื่อของตัวแปร
$x = 1;
$x = 2;
$y = $x + 6;
ในตัวอย่างเป็นการประกาศตัวแปรในภาษา PHP ในบรรทัดแรกเป็นการประกาศตัวแปร $x
และกำหนดค่าเป็น 1
ในบรรทัดทัดต่อมาเป็นการเปลี่ยนค่าของตัวแปร $x
เป็น 2
เพราะว่าเราได้ประกาศตัวแปรนี้ไปแล้ว ถ้าเรายังไม่ประกาศโปรแกรมจะทำการสร้างตัวแปรมาใหม่ ต่อมาเราประกาศตัวแปร $y
และกำหนดค่าให้กับมันคือค่าของ $x + ุ6
ดังนั้นมันจะมีค่าเท่ากับ 8
การตั้งชื่อตัวแปรในภาษา PHP นั้นจะต้องประกอบไปด้วยตัวอักษร ตัวแปรเลขและเครื่องหมาย _
เท่านั้น และไม่สามารถขึ้นต้นด้วยตัวเลขได้ กฏนี้ยังใช้กับการกำหนดชื่ออื่นๆ ที่ผู้ใช้สร้างขึ้น ยกตัวอย่างเช่น ชื่อของฟังก์ชัน เมธอด หรือ คลาส
Info: ในการประกาศชื่อตัวแปรในภาษา PHP คุณสามารถใช้ตัวอักษรภาษาอื่นนอกเหนือจากภาษาอังกฤษได้ เช่น
$ชื่อ
$myNumber = 8; // valid
$my_number = 10.2; // valid
$_temp = 0; // valid
$score3 = 50; // valid
$11name = "M"; // not valid, start with number
$a.b = true; // not valid, contain dot
ในตัวอย่างเป็นการตั้งชื่อตัวแปรที่ถูกต้องและไม่ถูกต้องในภาษา PHP และชื่อของตัวแปรนั้นจะเป็นแบบ Case sensitive นั่นหมายความว่าตัวแปร $name
$Name
และ $NAME
นั้นเป็นคนละตัวแปรกัน
$n = 1;
$n = 3.25;
$n = "PHP";
ในการประกาศตัวแปรในภาษา PHP คุณไม่จำเป็นต้องกำหนดประเภทให้กับตัวแปร ซึ่ง PHP จะจัดการเรื่องนี้ให้โดยอัตโนมัติ ในตัวอย่างเราประกาศตัวแปร $n
และกำหนดค่า 1
ทำให้ตัวแปรนี้เป็นประเภทจำนวนเต็ม ต่อมาเรากำหนดค่า 3.25
ให้กับตัวแปร ประเภทของตัวแปรจะเปลี่ยนเป็นจำนวนจริง และเปลี่ยนเป็น String ตามลำดับ
ฟังก์ชันเกี่ยวกับตัวแปร
ในการทำงานกับตัวแปรในบางครั้ง เราใช้ฟังก์ชันเพื่อตรวจสอบบางอย่างเกี่ยวกับตัวแปร ต่อไปเราจะพูดเกี่ยวกับฟังก์ชันของตัวแปรในภาษา PHP
<?php
$site = "MarcusCode";
$year = 2016;
$pi = 3.14;
echo var_dump($site);
echo var_dump($year);
echo var_dump($pi);
echo isset($site), "\n";
unset($site);
echo isset($site), "\n";
?>
PHP มีฟังก์ชันที่ให้เราสามารถใช้งานกับตัวแปรมากมาย ฟังก์ชัน var_dump()
ในการตรวจสอบประเภทของตัวแปร และใช้ฟังก์ชัน isset()
ในการตรวจสอบว่าตัวแปรถูกประกาศแล้วหรือไม่ และฟังก์ชัน unset()
ใช้สำหรับยกเลิกการประกาศตัวแปรดังกล่าวและคืนค่าหน่วยความจำให้ระบบ ในตัวอย่างด้านบนเราทดสอบตัวแปรกับฟังก์ชันต่างๆ
string(10) "MarcusCode"
int(2016)
float(3.14)
1
นี่เป็นผลลัพธ์ของโปรแกรม ในบรรทัดสุดท้ายคุณจะเห็นบรรทัดว่างปล่าวซึ่งความจริงคือค่าของ false
ที่ไม่สามารถแสดงผลได้บน Console
ประเภทของข้อมูล
ประเภทข้อมูล คือการจำแนกประเภทของข้อมูลแบบต่างๆ การนำมาใช้งานกับตัวแปรในการเขียนโปรแกรม เช่น อายุ เป็นข้อมูลแบบตัวเลข และชื่อเป็นข้อมูลแบบตัวอักษรหรือ String ซึ่งประเภทของข้อมูลแต่ละแบบจะแตกต่างกันและใช้หน่วยความจำในการเก็บข้อมูลที่ต่างกัน
ในการเขียนโปรแกรมนั้นจะมีข้อมูลหลากหลายแบบ เพื่อที่จะจัดการข้อมูลปรเภทต่างๆ คุณจำเป็นต้องเข้าใจประเภทของข้อมูลก่อน ซึ่งในภาษา PHP จะมีข้อมูลแบ่งออกเป็น 8 ประเภท ได้แก่ Boolean Integer Float String Array Resource และ Null ต่อไปเราจะอธิบายแต่ละประเภท
Boolean
ฺBoolean คือประเภทข้อมูลที่มีค่าที่เป็นไปได้เพียงสองค่าคือ true หรือ false ซึ่งข้อมูลประเภทนี้ใช้หน่วยความจำในการเก็บข้อมูลน้อยที่สุด (1 bit) เราใช้ตัวแปร Boolean ในการเก็บค่าที่เป็นไปได้เพียงสองอย่าง เช่น กลางวันหรือกลางคืน เพศชายหรือเพศหญิง จำนวนคู่หรือจำนวนคี่ เป็นต้น
$male = true;
$is_rain = false;
$is_even_number = (5 % 2 == 0);
$is_odd_number = !$is_even_number;
ในตัวอย่างเราได้ประกาศตัวแปร $male
ซึ่งเก็บค่า true
ซึ่งเป็นเพศชาย เมื่อตัวแปรนี้มีค่าเป็น false เราจะหมายถึงเพศหญิง ตัวแปรถัดมา $is_rain
เป็นตัวแปรเก็บสถานะการตกของฝน เรากำหนดเป็น false
หมายถึงฝนไม่ตก
ตัวแปร $is_even_number
เป็นการเก็บค่าว่าตัวเลขเป็นเลขจำนวนคู่หรือไม่ โดยเราคำนวณจาก Expression โดยการตรวจสอบว่า 5 หารด้วยสองลงตัวหรือไม่ เพราะ 5 หารด้วยสองไม่ลงตัว ทำให้ได้ค่าเป็น false
และตัวแปร $is_odd_number
เราเก็บค่าตรงข้ามของตัวแปร $is_even_number
ซึ่งตัวแปรนี้จะมีค่าเป็น true
Integer
Integer คือประเภทข้อมูลแบบจำนวนเต็ม (จำนวนที่ไม่มีทศนิยม) สามารถเป็นได้จำนวนเต็มบวกและจำนวนเต็มลบ มันใช้สำหรับเก็บข้อมูลที่สามารถนับได้ เช่น จำนวนของแอปเปิ้ลในตระกร้า คะแนนสอบวิชาคณิตศาสตร์ เป็นต้น
<?php
$apple = 3;
$score = -10;
echo "I have $apple apples in the basket.\n";
echo "Your score is $score .\n";
$minute = 5;
$second = 30;
$total_second = ($minute * 60) + $second;
echo "There are $total_second seconds left.\n";
?>
ในตัวอย่างเราประกาศตัวแปรชนิด Integer ทั้งหมด 5 ตัว โดยเรากำหนดค่าให้กับตัวแปรเหล่านั้น และแสดงค่าของตัวแปรออกทางหน้าจอ
I have 3 apples in the basket.
Your score is -10.
There are 330 seconds left.
นี่เป็นผลลัพธ์ของโปรแกรม
ในภาษา PHP คุณยังสามารถกำหนดค่าให้กับตัวแปรในฐานต่างๆ ได้ด้วยการใส่ prefix ในแบบต่างๆ โดยในเลขฐาน 8 จะใช้ 0
ในฐาน 16 จะใช้ 0x
และในฐาน 2 จะใช้ ob
ซึ่งข้อมูลที่เก็บในตัวแปรจะถูกแปลงไปเป็นฐาน 10
<?php
$decimal = 37;
$octal = 045;
$hexadecimal = 0x25;
$binary = 0b00100101;
echo "$decimal \n";
echo "$octal \n";
echo "$hexadecimal \n";
echo "$binary \n";
?>
ในตัวอย่างเป็นการกำหนดค่าให้กับตัวแปรในรูปแบบฐานต่างๆ เราได้กำหนดค่า 37 ให้กับตัวแปรทั้งหมดซึ่ง 45
ในฐานแปด 25
ในฐานสิบหกและ 00100101
ในฐานสองนั้นมีค่าเท่ากับ 37 ในฐานสิบ
37
37
37
37
นี่เป็นผลลัพธ์ของโปรแกรม
นอกจากนี้ในภาษา PHP ยังมีฟังกันในการแปลงตัวเลขไปยังฐานต่างๆ ที่คุณสามารถเรียกใช้ได้
<?php
echo "10 in binary = ", decbin(10), "\n";
echo "57 hex in dec = ", hexdec(0x57), "\n";
echo "72 oct in dec = ", octdec(015), "\n";
?>
ในตัวอย่างเราเรียกใช้ฟังก์ชันในการแปลงตัวเลขฐาน 10 ไปยังฐาน 2 แปลงฐาน 16 ไปยังฐาน 10 และแปลงฐาน 8 ไปยังฐาน 10 ตามลำดับ
10 in binary = 1010
57 hex in dec = 135
72 oct in dec = 11
นี่เป็นผลลัพธ์ของโปรแกรม
Float
Floating number คือประเภทข้อมูลที่เก็บข้อมูลในรูปแบบของจำนวนจริง ซึ่งมักจะใช้ในการเก็บตัวเลขทีมีค่าและความละเอียดมาก เช่น ข้อมูลการคำนวณทางวิทยาศาตร์หรือตัวเลขที่มีจุดทศนิยม
<?php
$temperature = -10.3;
$height = 6.1;
$pi = 22 / 7;
$distance = 149.6E6;
$atom_size = 0.5E-10;
echo "Temperature is $temperature Celsius degree.\n";
echo "He has $height inches height.\n";
echo "PI value is $pi.\n";
echo "Distance between the earth and the sun $distance km.\n";
echo "Atom's size is about $atom_size meter(s)."
?>
ในตัวอย่างเป็นการประกาศตัวแปรประเภท Floating number และกำหนดค่ราาในรูปแบบต่างๆ ในตัวแปร $temperature
และ $height
เป็นการกำหนดค่าตัวเลขปกติ ตัวแปร $pi
เป็นการกำหนดค่าจาก Expression และสองตัวแปรสุดท้ายเป็นการกำหนดค่าแบบสัญกรณ์วิทยาศาสตร์ เช่น 149.6E6
หมายถึง 14.9 x 10 ^5 และ 0.5E-10
หมายถึง 0.5 x 10 ^ -10
Temperature is -10.3 Celsius degree.
He has 6.1 inches height.
PI value is 3.1428571428571.
Distance between the earth and the sun 149600000 km.
Atoms' size is about 5.0E-11 meter(s).
นี่เป็นผลลัพธ์ของโปรแกรม
String
String คือประเภทข้อมูลประเภทข้อความหรือการนำตัวอักษรหลายๆ ตัวมาต่อกัน โดยความยาวของ String นั้นสามารถเปลี่ยนแปลงได้ซึ่งเป็นตัวแปรแบบไดนามิกส์ ในภาษา PHP นั้น สามารถเก็บตัวอักษรได้ทุกแบบ เช่น UTF-8 เนื่องจาก String มีเนื้อหาค่อนข้างมากเราจะพูดในภายหลังในบทของ String
<?php
$country = "United Kingdom";
$fruit = "Apple";
$name = "Marcus";
$date = "November 8, 2016";
?>
นี่เป็นตัวอย่างบางส่วนในการประกาศตัวแปรประเภท String
Array
อาเรย์ คือประเภทข้อมูลแบบชุดซึ่งมีการเก็บของข้อมูลเป็นลำดับโดยมี Index ในการอ้างถึงค่าของสมาชิกในอาเรย์ ยกตัวอย่างเช่น คุณต้องการเก็บรายชื่อของพนักงาน 10 คน คุณจะต้องใช้อาเรย์ในการเก็บข้อมูล ซึ่งจะทำให้สะดวกในการจัดการกับข้อมูลมากจาก อาเรย์มักจะใช้กับคำสั่งวนลูปเช่น คำสั่ง For และ Foreach เพื่อวนอ่านค่าในอาเรย์
$name = ["Thomas", "Danny", "John", "Lisa", "Sophia"];
print_r($name);
$score = [30, 70, 80, 70, 90];
print_r($score);
ในตัวอย่างเป็นการประกาศตัวแปรอาเรย์ในภาษา PHP ซึ่งเป็นอาเรย์ของ String และของ Integer ตามลำดับ เราใช้ฟังก์ชัน print_r()
เพื่อแสดงข้อมูลในอาเรย์ สำหรับข้อมูลประเภทอาเรย์เราจะพูดอย่างละเอียดอีกครั้งในบทของอาเรย์
Object
ออบเจ็ค คือประเภทข้อมูลแบบ Reference type ในขณะที่ข้อมูลที่เราได้กล่าวก่อนหน้านั้นเป็นแบบ Value type ซึ่งข้อมูลประเภทนี้อ้างถึงที่อยู่ของออบเจ็คในหน่วยความจำ หรือเรียกว่าตัวแปรพอยน์เตอร์ของข้อมูลที่อ้างไปยังตำแหน่งที่อยู่ในหน่วยความจำ สำหรับข้อมูลประเภทนี้คุณจะได้เรียนในบทของการเขียนโปรแกรมเชิงวัตถุของบทเรียนนี้
Resource
Resource คือประเภทข้อมูลพิเศษที่เก็บข้อมูลจากภายนอก โดยข้อมูลของตัวแปรประเภทนี้มักจะสร้างจากฟังก์ชันพิเศษ เช่น การอ่านข้อมูลจากฐานข้อมูล หรือการอ่านข้อมูลของรูปภาพ ข้อมูลเหล่านี้จะถูกเก็บไว้ในตัวแปร Resource ในรูปแบบของ Binary
Null
NULL เป็นข้อมูลชนิดพิเศษในการบ่งบอกถึงว่าตัวแปรไม่ได้ถูกกำหนดหรือสร้างขึ้น ซึ่ง NULL เป็นประเภทข้อมูลของมันเอง ตัวแปรจะมีค่าเป็น NULL ถ้าหากมันถูกกำหนดโดย NULL
หรือยังไม่ได้กำหนดค่า หรือการใช้ฟังก์ชัน unset()
เพื่อยกเลิกตัวแปร
<?php
$var = NULL;
$name;
$a = array();
?>
ในตัวอย่างเป็นการประกาศตัวแปรที่มีค่าเป็น NULL
ซึ่งมันแบบ case-insensitive สามารถใช้ null
ได้เช่นกัน คุณสามารถใช้ฟังก์ชัน is_null()
เพื่อตรวจสอบตัวแปรได้
การแปลงข้อมูลในภาษา PHP
ในการประกาศตัวแปรและกำหนดค่าให้กับตัวแปรนั้น ภาษา PHP จะตรวจสอบค่าที่เราได้กำหนดให้กับตัวแปรว่าเป็นข้อมูลประเภทไหน ซึ่งเรีบกว่า Implicit type conversion ในภาษา PHP คุณสามารถแปลงค่าข้อมูลอีกประเภทหนึ่งไปเป็นอีกประเภทหนึ่งได้เอง เราเรียกว่า Explicit type conversion หรือ Type casting มาดูตัวอย่าง
$floatValue = 1.53;
$intValue = (int)$floatValue;
echo var_dump($floatValue);
echo var_dump($intValue);
ในตัวอย่างเป็นการแปลงข้อมูลจาก Integer ไป Float โดยการ Type casting เราใช้เครื่องหมายวงเล็บ ()
ภายในเป็นประเภทข้อมูลที่ต้องการแปลงไปยัง เช่น int
float
string
bool
เป็นต้น
float(1.53)
int(1)
นี่เป็นผลลัพธ์ของโปรแกรม
การเท่ากันของข้อมูล (Boolean)
เนื่องจากภาษา PHP นั้นมีประเภทข้อมูลเป็นแบบไดนามิกส์ โปรแกรมเมอร์ไม่จำเป็นต้องประกาศประเภทของข้อมูลในตอนสร้างตัวแปร ดังนั้นตัวแปรต่างๆ จึงสามารถที่จะเปรียบเทียบได้กับ Boolean เมื่อคุณใช้ค่าที่ไม่ใช่ Boolean ในบางบริบทของโปรแกรม
Boolean มีค่าที่เป็นไปได้คือ true
และ false
ค่าต่อไปนี้จะมีค่าเท่ากับ false
ของ ฺBoolean
- Boolean ที่ถูกกำหนดค่า
false
- Integer ที่มีค่าเป็น
0
- Float ที่มีค่าเป็น
0.0
- String ที่มีค่าเป็นว่างปล่าว (
""
) หรือ"0"
- อาเรย์ ที่ไม่มีสมาชิก
- ตัวแปรที่มีค่าเป็น NULL
- ออบเจ็คของ SimpleXML ที่สร้างด้วย Tag ที่ว่างปล่าว
ต่อไปนี้เป็นตัวอย่างที่จะแสดงให้เห็นถึงการเท่ากันดังกล่าวโดยการ Casting
<?php
// False values
echo var_dump((bool)0);
echo var_dump((bool)0.0);
echo var_dump((bool)"");
echo var_dump((bool)[]);
echo var_dump((bool)NULL);
// True values
echo var_dump((bool)5);
echo var_dump((bool)1.8);
echo var_dump((bool)"A");
echo var_dump((bool)[1, 2, 3]);
?>
ในตัวอย่างเราได้แสดงให้คุณเห็นสำหรับข้อมูลประเภทอื่นๆ ที่ถูกแปลงไปยัง Boolean
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
bool(true)
และนี่เป็นผลลัพธ์ของโปรแกรม
ดังนั้นคุณควรจะระวังในการใช้งานค่าต่างๆ ในการเปรียบเทียบ ตัวอย่างข้างล่างนี้เป็นปัญหาที่เกิดขึ้นกับหลายคนเมื่อพวกเขาไม่เข้าใจวิธีการเปรียบเทียบในภาษา PHP ซึ่งทั้งสามบล็อคจะถูกประมวลผลเสมอเพราะข้อมูลประเภทอื่นถูกแปลงเป็น Boolean เมื่อมันทำงานกับคำสั่ง If
<?php
if (1 == true) {
echo "Block 1 executed.\n";
}
if ("Marcus" == true) {
echo "Block 2 executed.\n";
}
if (10.2) {
echo "Block 3 executed.\n";
}
?>
ในบทนี้ คุณได้เรียนรู้เกี่ยวการประกาศและใช้งานตัวแปรและประเภทข้อมูลต่างๆ ที่ใช้ในวัตถุประสงค์ที่แตกต่างกัน รวมถึงการแปลงข้อมูลในภาษา PHP