ภาษาพีเอชพี/ประเภทของตัวแปร/จำนวนเต็ม
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 ยังไม่มีการกำหนด เพราะฉะนั้นอย่าไว้ใจกับรูปแบบที่ค้นพบเอาเอง
เพราะมันอาจจะเปลี่ยนแปลงได้โดยไม่มีการประกาศให้ทราบก่อน