การสลับชนิดและการแปลงชนิด
ทำความเข้าใจว่า PHP แปลงชนิดให้โดยอัตโนมัติอย่างไร และวิธีแปลงชนิดด้วยตนเอง
การสลับชนิดและการแปลงชนิด เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเปลี่ยนชนิดข้อมูลอัตโนมัติคืออะไร
การเปลี่ยนชนิดข้อมูลอัตโนมัติ หมายถึงการที่ PHP แปลงชนิดข้อมูลของค่าโดยอัตโนมัติ เมื่อตัวดำเนินการหรือฟังก์ชันต้องการชนิดข้อมูลอื่น
คุณลักษณะนี้สะดวก แต่หากไม่เข้าใจกฎต่าง ๆ ก็อาจทำให้เกิดข้อผิดพลาดที่สังเกตได้ยาก
การแปลงชนิดข้อมูลอัตโนมัติในการคำนวณ
PHP จะแปลงสตริงเป็นตัวเลขเมื่อนำไปใช้ในบริบททางคณิตศาสตร์:
<?php
echo '5' + 3; // 8 — string '5' becomes int 5
echo '5.5' + 1.5; // 7 — string '5.5' becomes float
echo '5 cats' + 1; // 6 — leading numeric part used, rest ignored
echo 'cats' + 1; // 1 — non-numeric string becomes 0การเปรียบเทียบแบบไม่เคร่งครัด ==
ตัวดำเนินการ == จะเปรียบเทียบค่าหลังจากแปลงชนิดข้อมูลอัตโนมัติแล้ว ซึ่งอาจให้ผลลัพธ์ที่น่าประหลาดใจ:
<?php
var_dump(0 == 'a'); // true in PHP 7 (both become 0)
// false in PHP 8 (improved rules!)
var_dump('' == false); // true
var_dump('1' == true); // true
var_dump(null == false); // trueการเปรียบเทียบแบบเคร่งครัด ===
ควรใช้ === เพื่อเปรียบเทียบทั้งค่าและชนิดข้อมูลเสมอ โดยจะไม่มีการแปลงชนิดข้อมูลอัตโนมัติ:
<?php
var_dump(1 === '1'); // false — different types
var_dump(1 === 1); // true
var_dump(null === false); // false
var_dump(0 === false); // false
// Rule of thumb: prefer === unless you explicitly need type coercionการแปลงชนิดข้อมูลอย่างชัดเจน
แปลงค่าเป็นชนิดข้อมูลที่ต้องการโดยเติม (type) ไว้ข้างหน้า:
<?php
$str = '42.7';
$int = (int) $str; // 42
$float = (float) $str; // 42.7
$bool = (bool) $str; // true
$arr = (array) $str; // ['42.7']
echo $int; // 42
echo $float; // 42.7ฟังก์ชัน settype()
settype() เปลี่ยนชนิดข้อมูลของตัวแปรโดยตรง และคืนค่าเป็นจริงหรือเท็จ:
<?php
$value = '123';
settype($value, 'integer');
var_dump($value); // int(123)
// Alternative: intval(), floatval(), strval() functions
$n = intval('0xFF', 16); // 255 — parse hex stringกรณีขอบของการแปลงสตริงเป็นตัวเลข
กฎสำคัญเมื่อ PHP แปลงสตริงเป็นตัวเลข:
- ละเว้นช่องว่างด้านหน้า:
' 42 '→ 42 - คำนำหน้าที่ไม่ใช่ตัวเลข:
'php8'→ 0 (การแจ้งเตือนใน PHP 8) - รูปแบบเลขยกกำลัง:
'1e3'→ 1000.0 - สตริงเลขฐานสิบหก:
'0x1A'จะไม่ถูกแปลงเป็น int โดยอัตโนมัติใน PHP 7 ขึ้นไป
กฎการแปลงเป็นค่าบูลีน
ค่าเหล่านี้จะแปลงเป็น false ส่วนค่าอื่นทั้งหมดจะเป็น true:
<?php
$falsy = [false, 0, 0.0, '', '0', [], null];
foreach ($falsy as $v) {
var_dump((bool) $v); // all bool(false)
}
// Careful:
var_dump((bool) '0'); // false — the STRING '0' is falsy!
var_dump((bool) '00'); // true — only exactly '0' is falsyintval() กับฐานตัวเลข
intval() รับพารามิเตอร์ฐานที่ไม่บังคับ เพื่อใช้แยกวิเคราะห์สตริงตัวเลข:
<?php
echo intval('0b1010', 2); // 10 — binary
echo intval('077', 8); // 63 — octal
echo intval('1F', 16); // 31 — hexadecimal
echo intval('42'); // 42 — decimal (default base 10)การแปลงชนิดข้อมูลอัตโนมัติที่ได้รับการปรับปรุงใน PHP 8
PHP 8 แก้ไขความไม่สอดคล้องบางประการในการแปลงชนิดข้อมูลอัตโนมัติจากเวอร์ชันก่อนหน้า:
0 == 'foo'จะเป็นfalseในปัจจุบัน (ใน PHP 7 เคยเป็นtrue)- เมื่อเปรียบเทียบตัวเลขกับสตริงที่ไม่ใช่ตัวเลข สตริงจะไม่ถูกบังคับให้เป็น 0 อีกต่อไป
- การเปลี่ยนแปลงนี้ทำให้ PHP 8 ปลอดภัยขึ้น แต่อาจทำให้โค้ดเดิมที่อาศัยพฤติกรรมแบบเก้าทำงานผิดพลาด
การหลีกเลี่ยงข้อผิดพลาดจากการแปลงชนิดข้อมูลอัตโนมัติ
แนวปฏิบัติที่ดีเพื่อหลีกเลี่ยงผลลัพธ์ที่ไม่คาดคิดจากการแปลงชนิดข้อมูลอัตโนมัติ:
<?php
declare(strict_types=1); // enforce types at function boundaries
// Always use === for comparisons
if ($status === 'active') { /* safe */ }
// Cast explicitly before arithmetic
$total = (float) $_POST['price'] * (int) $_POST['qty'];
// Validate with filter_var
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT);
if ($age === false) { /* invalid input */ }ตรวจสอบความเข้าใจ
(int) '42abc' จะประเมินค่าเป็นอะไรใน PHP
สรุป: การแปลงชนิดข้อมูลอัตโนมัติ
สิ่งที่ได้เรียนรู้เกี่ยวกับการจัดการชนิดข้อมูลของ PHP:
- PHP จะบังคับแปลงชนิดข้อมูลโดยอัตโนมัติในการดำเนินการต่าง ๆ ซึ่งเรียกว่าการแปลงชนิดข้อมูลอัตโนมัติ
==เปรียบเทียบค่าหลังการแปลงชนิดข้อมูลอัตโนมัติ ส่วน===เป็นการเปรียบเทียบแบบเคร่งครัด (ชนิดข้อมูล + ค่า)- แปลงชนิดข้อมูลอย่างชัดเจนด้วย
(int),(float),(string),(bool) - ใช้
intval(),floatval(),strval()เป็นทางเลือกแบบฟังก์ชัน - PHP 8 ปรับปรุงกรณีขอบบางอย่างของการแปลงชนิดข้อมูลอัตโนมัติ
- เปิดใช้
strict_types=1เพื่อลดผลลัพธ์ที่ไม่คาดคิดในโค้ด
คำถามที่พบบ่อย
บทเรียน “การสลับชนิดและการแปลงชนิด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสลับชนิดและการแปลงชนิด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสลับชนิดและการแปลงชนิด”
ทำความเข้าใจว่า PHP แปลงชนิดให้โดยอัตโนมัติอย่างไร และวิธีแปลงชนิดด้วยตนเอง คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การสลับชนิดและการแปลงชนิด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การประกาศตัวแปรใน PHP
- ภาพรวมชนิดข้อมูล PHP
- Echo และ Print สำหรับแสดงผลลัพธ์
- การสลับชนิดและการแปลงชนิด