0Pricing
PHP Academy · บทเรียน

การสลับชนิดและการแปลงชนิด

ทำความเข้าใจว่า 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 falsy

intval() กับฐานตัวเลข

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การประกาศตัวแปรใน PHP
  2. ภาพรวมชนิดข้อมูล PHP
  3. Echo และ Print สำหรับแสดงผลลัพธ์
  4. การสลับชนิดและการแปลงชนิด
← กลับไปที่ PHP Academy