Integers แก้ไข

ชนิด integer คือ จำนวน ในเซ็ตของ Z = {..., -2, -1, 0, 1, 2, ...}
หรือที่เรียกกันว่า จำนวนเต็ม

รูปแบบคำสั่ง แก้ไข

Integer สามารถกำหนดค่าได้ทั้งในแบบ ฐานสิบ(decimal) ฐานสิบหก(hexadecimal) ฐานแปด(octal) สามารถใช้เครื่องหมายกำกับได้ (+ หรือ -)


หากต้องการกำหนดแบบฐานแปด ให้นำหน้าจำนวนด้วย 0 (ศุนย์) ถ้าต้องการใช้เลขฐานสิบหกให้นำหน้าจำนวนด้วย 0x

<?php
$a = 1234; // เลขฐานสิบ
$a = -123; // เลขฐานสิบติดลบ
$a = 0123; // เลขฐานแปด (มีค่า 83 ในเลขฐานสิบ)
$a = 0x1A; // เลขฐานสิบหก (มีค่า 26 ในเลขฐานสิบ)
?>

ขนาดที่ใช้ในการเก็บ integer ขึ้นอยู่กับแพล็ตฟอร์มที่ใช้ โดยค่าที่เก็บได้สูงสุดจะประมาณ 2 พันล้าน(signed integer 32 bits) PHP นั้นไม่สนับสนุน unsigned integer ส่วนขนาดของ interger สามารถกำหนดได้โดยใช้ PHP_INT_SIZE และค่าสูงสุดกำหนดได้โดยใช้ PHP_INT_MAX

  • ถ้ามีการใส่ตัวเลขที่ไม่ถูกต้องใน octal integer (เช่น 8 หรือ 9) ตัวเลขที่เหลือจะถูกข้ามไป
<?php
var_dump(01090); // 010 octal = 8 decimal
?>

Integer Overflow แก้ไข

ถ้า PHP พบกับจำนวนที่มีค่าเกินกว่าที่ชนิด integer จะเก็บได้ จะเกิดการแปลงให้การเป็น float แทนและเช่นเดียวกันหากผลลัพธ์ของการคำนวนใดเกินกว่าที่ชนิด integer เก็บได้จะเกิดการแปลงเป็น float เช่นกัน

<?php
$large_number =  2147483647;
var_dump($large_number);
// output: int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)

// it's true also for hexadecimal specified integers between 2^31 and 2^32-1:
var_dump( 0xffffffff );
// output: float(4294967295)

// this doesn't go for hexadecimal specified integers above 2^32-1:
var_dump( 0x100000000 );
// output: int(2147483647)

$million = 1000000;
$large_number =  50000 * $million;
var_dump($large_number);
// output: float(50000000000)
?>
  • ใน PHP ไม่มี operator การหาร สำหรับ integer
    1/2 จะได้ค่า float 0.5 โดยค่าสามารถ cast(แปลง) เป็น integer ได้แต่จะมีการปัดลง หรือจะใช้ round() ที่ควบคุมการปัดได้มากกว่าเดิม
<?php
var_dump(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>

การแปลงเป็น integer แก้ไข

สามารถแปลงค่าเป็น integer ได้ด้วยการใช้ (int) หรือ (integer) แบบในตัวอย่างข้างบน แต่โดยมากแล้วมัก ไม่จำเป็น เนื่องจากค่าจะได้รับการแปลงโดยอัตโนมัติหากว่า operator, function หรือ control structure นั้นต้องการค่าชนิด integer เป็น argument และค่านั้นสามารถแปลงเป็น integer ได้ด้วยฟังก์ชั่น intval()

แปลงจาก boolean แก้ไข

FALSE จะได้ค่าเป็น 0 (ศูนย์) และ TRUE จะได้ค่าเป็น 1 (หนึ่ง)

แปลงจาก float แก้ไข

เมื่อมีการแปลงจาก float เป็น integer ค่าจะถูกปัดลง


ถ้าหากแปลงค่า float เกินกว่าที่ int จะเก็บไว้ได้ ผลลัพธ์ที่จะได้ยังไม่ถูกกำหนด เนื่องจาก float นั้นไม่มีความแม่นยำพอที่จะบอก integer ที่เจาะจงได้


จะไม่มีการเตือน เมื่อเกิดปัญหาแบบนี้

  • คำเตือน : อย่าได้ cast เศษที่แปลก ๆ เนื่องจากบางครั้งอาจจะทำให้พบกับผลลัพธ์ที่ไม่คาดคิด
<?php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7! แบบนี้
?>

การแปลงจาก string แก้ไข

  • อ่านต่อใน Strings

การแปลงจากประเภทอื่น ๆ นอกจากนี้ แก้ไข

  • การแปลงจากชนิดตัวแปรประเภทอื่น ๆ นอกเหนือจากที่กล่าวมาเป็น integer ยังไม่มีการกำหนด เพราะฉะนั้นอย่าไว้ใจกับรูปแบบที่ค้นพบเอาเอง
    เพราะมันอาจจะเปลี่ยนแปลงได้โดยไม่มีการประกาศให้ทราบก่อน