PHP เบื้องต้น > ภาษา PHP
การแปลงประเภทข้อมูล
ตามที่ได้กล่าวไว้ว่า PHP เป็นภาษา richly type และ engine สามารถแปลงระหว่างประเภทข้อมูลต่างกันในเวลาเรียกใช้
PHP สามารถแปลงหรือเจาะจงประเภทข้อมูลได้
วิธีพื้นฐาน
วิธีพื้นฐานในการแปลงประเภทข้อมูลตัวแปรมี 2 วิธีคือ
การแปลงประเภทเชิงนัยยะ
การแปลงเชิงนัยยะ (implicit conversion) เป็นการประเภทข้อมูลที่เกิดขึ้นโดย PHP engine อย่างอัตโนมัติ เมื่อมีการประมวลผล PHP จะกำหนดประเภทข้อมูลให้ตัวแปรให้ตามความเหมาะสม
- การคำนวณเลขคณิต ถ้ามี operand ที่เป็น integer กับอีกตัวเป็น float จากนั้นตัวแรกจะได้รับการประเมินเป็น float ถ้า operand เป็น string และอีกตัวเป็น integer กรณีนี้ PHP จะแปลง string เป็น integer ก่อนการคำนวณ
- นิพจน์ Boolean สำหรับกรณีการประเมินนิพจน์ Boolean ผลลัพธ์ที่เกิดขึ้น PHP จะแปลงเป็น Boolean ก่อนทำงานต่อไป
- เมธอดที่ต้องการ string เมธอดหรือ operator เช่น echo, print หรือ string concatenation operator (.) ต้องการอากิวเมนต์หรือ operand เป็น string ในกรณีนี้ PHP จะแปลงตัวแปรที่ไม่ใช่ข้อความให้เป็นข้อความ
การแปลงประเภทเชิงประจักษ์
ถึงแม้ว่า PHP จะแปลงตัวแปรให้อย่างอัตโนมัติ แต่ยังมีทางเลือกในการระบุประเภทข้อมูลได้เองด้วยการบังคับให้ภาษาแปลงประเภทข้อมูลโดยทำในสิ่งที่เรียกว่า type cast การกำหนดให้เติมหน้าตัวแปรด้วยประเภทข้อมูลในวงเล็บ จากนั้น PHP จะพยายามแปลงให้
- (int), (integer) แปลงเป็นเลขจำนวนเต็ม integer
- (float), (double), (real) แปลงเป็นเลขทศนิยม float
- (string) แปลงเป็นข้อความ string
- (bool), (boolean) แปลงเป็นค่า Boolean
- (array) แปลงเป็น array
- (object) แปลงเป็น object
<?php
$testvar = 3.7;
$result = int($testvar); // ผลลัพธ์เป็นจำนวนเต็ม 3
?>
การเจาะจงแปลงประเภทข้อมูล
ตัวอย่างการแปลงเป็น integer
<?php
echo (int)"642"; |
// แสดงผล 642 |
echo (int)"+5678"; |
// แสดงผล 5678 |
echo (int)"84e2"; |
// 84 - หยุดการกระจายที่ e |
echo (int)"3 ตัว"; |
// 3 - หยุดที่ช่องว่าง |
echo (int)"หมู 3 ตัว"; |
// 0 - ไม่ใช่ตัวเลข |
echo (int)"0642"; |
// 642 - เลขฐาน 10 เท่านั้น |
echo (int)"0xff"; |
// 0 - เลขฐาน 10 เท่านั้น หยุดที่ x |
echo (int)"-4321"; |
// -4321 - จำนวนลบ |
echo (int)".324243"; |
// 0 - หยุดที่ . |
?>
ตัวอย่างการแปลงเป็น float
<?php
$float1 = (float)"+4567"; |
// ค่า float : 4567.0 |
$float2 = (float)"-123"; |
// -123.0 |
$float3 = (float)"123.456"; |
// 123.456 |
$float4 = (float)"1.23456e2"; |
// 123.456 |
$float5 = (float)"1.234e-2"; |
// 0.001234 |
$float6 = (float)"1000000000000"; |
// 1e12 (หนึ่งล้านล้าน) |
?>
ตัวอย่างการแปลงเป็น Boolean
<?php
// การแปลงจากค่าตัวเลข integer และ float |
|
$bool1 = (bool)0; |
// FALSE |
$bool2 = (bool)0.0; |
// FALSE |
$bool3 = (bool)-10; |
// TRUE |
$bool4 = (bool)456456e-12; |
// TRUE |
$bool5 = (bool)(0.3 + 0.2 - 0.5); |
// TRUE - เพราะไม่เท่ากับ 0 พอดี |
// การแปลงจาก string |
|
$bool6 = (bool)"happy"; |
// TRUE |
$bool7 = (bool)""; |
// FALSE |
$bool8 = (bool)"0"; |
// FALSE |
$bool9 = (bool)"TRUE"; |
// TRUE |
$bool10 = (bool)"FALSE"; |
// TRUE! ไม่ใช่ค่าว่างและไม่ใช่ "0" |
?>
ตัวอย่างการแปลงเป็นอ๊อบเจค
<?php
$variable = (object)234.234;
echo $variable->scalar; // 234.234
?>
การแปลงตัวแปรหรือนิพจน์เป็น array สามารถใช้ประเภทข้อมูล (array) หรือฟังก์ชัน array โดยจะแปลงเป็น 1 หน่วยข้อมูลของค่าตัวแปรหรือนิพจน์นั้น
ส่วนอ๊อบเจคแปลงเป็น array ได้ โดย คีย์มาจากชุดของตัวแปรสมาชิกและค่ามาจากค่าของตัวแปรสมาชิกในอ๊อบเจค
ฟังก์ชันประเภทข้อมูล
ฟังก์ชันที่มีประโยชน์ในความเข้าใจกับประเภทข้อมูลและตัวแปรใน PHP
is_type
ฟังก์ชันกลุ่มนี้ใช้บอกประเภทข้อมูลของตัวแปร
- is_integer
- is_float
- is_numeric (ส่งออก TRUE ถ้าอากิวเมนต์เป็น float, integer หรือ ข้อความตัวเลข)
- is_string
- is_bool
- is_array
- is_object
- is_null
ฟังก์ชันเหล่านี้ส่งออกค่า Boolean ที่บอกค่าเป็นประเภทข้อมูลที่ระบุว่าใช่ (TRUE) หรือ ไม่ใช่ (FALSE)
gettype
ฟังก์ชัน gettype บอกประเภทข้อมูลของตัวแปรหรือนิพจน์ ด้วยการส่งออกค่าต่อไปนี้
- "boolean"
- "integer"
- "double" (หมายเหตุ ตามเหตุผลทางประวัติศาสตร์ และไม่ส่งออกค่าเป็น float)
- "string"
- "array"
- "object"
- "resource"
- "NULL"
- "unknown type"
settype
ฟังก์ชัน settype ต้องการ 2 อากิวเมนต์คือ ตัวแปร และประเภทข้อมูลที่ต้องการแปลง ด้วยการระบุเป็นนิพจน์ข้อความ ฟังก์ชันนี้ส่งออกค่า Boolean ที่ระบุถึงความสำเร็จ ตัวแปรนั้นจะถูกปรับปรุง
<?php
$var = 743.256;
settype($var, "string");
// $var มีค่า "743.256" และประเภทเป็น string
?>
|