ตัวแปรและประเภทข้อมูล

10 December 2016

ตัวแปร

ตัวแปร คือสิ่งที่ใช้เก็บค่าของข้อมูลในหน่วยความจำ ตัวแปรจะประกอบไปด้วยชื่อของตัวแปร (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

บทความนี้เป็นประโยชน์หรือไม่?Yes·No