การเปลี่ยนแปลงประเภทตัวแปร (juggling)
PHP ไม่ต้องการ (หรือไม่สนับสนุน) การระบุประเภทตัวแปรในตัวแปรที่ประกาศ ประเภทของตัวแปรจะถูกกำหนดโดยบริบทที่ใช้ตัวแปร นั่นคือ ถ้าคุณกำหนดสตริงให้กับตัวแปร var ค่า of var กลายเป็นตัวแปรสตริง หากคุณกำหนดจำนวนเต็มให้กับ var ก็จะกลายเป็นตัวแปรจำนวนเต็ม
ตัวอย่างของ PHP ที่แปลงประเภทตัวแปรโดยอัตโนมัติคือตัวดำเนินการบวก '+' ถ้าตัวถูกดำเนินการใดๆ เป็นค่าสองเท่า ตัวถูกดำเนินการทั้งหมดจะถูกประเมินว่าเป็นค่าสองเท่า และผลลัพธ์จะเป็นค่าสองเท่าด้วย มิฉะนั้น ตัวถูกดำเนินการจะถือเป็นจำนวนเต็ม และผลลัพธ์จะเป็นจำนวนเต็ม โปรดทราบว่าการดำเนินการนี้ไม่ส่งผลต่อประเภทตัวแปรของตัวถูกดำเนินการแต่ละตัว การเปลี่ยนแปลงเพียงอย่างเดียวคือวิธีการประมวลผลตัวถูกดำเนินการระหว่างการคำนวณ
$foo = "0"; // $foo คือสตริงที่มีค่า "0" (ASCII 48)
$foo++; // $foo คือสตริงที่มีค่า "1" (ASCII 49)
$foo += 1; // $foo ตอนนี้เป็นจำนวนเต็ม (2)
$foo = $foo + 1.3; // $foo ตอนนี้เป็นสองเท่า (3.3)
$foo = 5 + "10 Little Piggies"; (15)
$foo = 5 + "10 ลูกหมู"; // $foo เป็นจำนวนเต็ม (15)
หากคุณคิดว่าสองนิพจน์สุดท้ายในตัวอย่างข้างต้นดูแปลกเล็กน้อย โปรดดูส่วน "การแปลงสตริง"
หากคุณต้องการบังคับให้ประเมินตัวแปรเป็นประเภทคงที่ โปรดดูส่วน "การแคสต์" หากคุณต้องการเปลี่ยนประเภทของตัวแปร โปรดดูคำอธิบายของฟังก์ชัน "settype()"
กำหนดประเภทของตัวแปร
เนื่องจาก PHP กำหนดประเภทของตัวแปรเอง และโดยทั่วไปจะแปลงตามความจำเป็น ประเภทของตัวแปรเฉพาะจึงไม่ชัดเจนเสมอไป PHP มีฟังก์ชันสำหรับค้นหาประเภทของตัวแปรนี้ ฟังก์ชันเหล่านี้ได้แก่ gettype(), is_long(), is_double(), is_string(), is_array() และ is_object()
ประเภทการหล่อ
การบังคับประเภทใน PHP นั้นเหมือนกับในภาษา C โดยประมาณ: เขียนประเภทที่ต้องการในวงเล็บหน้าตัวแปรที่จะบังคับ
$foo = 10; // $foo เป็นจำนวนเต็ม
$bar = (double) $foo; // $bar เป็นสองเท่า
อนุญาตให้ใช้วิธีการบังคับต่อไปนี้:
(int), (จำนวนเต็ม) – บังคับให้เป็นจำนวนเต็ม
(ของจริง), (สองเท่า), (ลอย) – บังคับให้เพิ่มเป็นสองเท่า
(สตริง) - บังคับให้สตริง
(อาร์เรย์) - บังคับให้อาร์เรย์
(วัตถุ) - บังคับให้คัดค้าน
โปรดทราบว่าอนุญาตให้ใช้แท็บและช่องว่างภายในวงเล็บได้ ดังนั้นคำสั่งต่อไปนี้จึงเทียบเท่ากัน:
$foo = (int) $บาร์;
$foo = ( int ) $bar;
การแปลงสตริง
เมื่อประเมินสตริงเป็นค่าตัวเลข ผลลัพธ์และประเภทของสตริงจะถูกกำหนดตามที่อธิบายไว้ด้านล่าง
หากสตริงนี้มีอักขระ '.', 'e' หรือ 'E' จะถือเป็นตัวแปรประเภทคู่ มิฉะนั้นจะถือเป็นจำนวนเต็ม
ค่าของสตริงนี้ถูกกำหนดโดยคำนำหน้า ถ้าสตริงขึ้นต้นด้วยข้อมูลตัวเลขที่ถูกต้อง ข้อมูลตัวเลขจะเป็นค่าที่ใช้ประเมินสตริง มิฉะนั้นค่าจะเป็นศูนย์ ข้อมูลตัวเลขที่ถูกต้องจะเป็นไปตามสัญลักษณ์ต่อไปนี้ ตามด้วยตัวเลขหนึ่งหลักขึ้นไป (ซึ่งอาจรวมจุดทศนิยม) ตามด้วยเลขชี้กำลังที่เป็นทางเลือก เลขชี้กำลังประกอบด้วยตัวเลขหนึ่งหลักขึ้นไปตามด้วย 'e' หรือ 'E'
$foo = 1 + "10.5"; // $foo เป็นสองเท่า (11.5)
$foo = 1 + "-1.3e3"; // $foo เป็นสองเท่า (-1299)
$foo = 1 + "bob -1.3 e3"; // $foo เป็นจำนวนเต็ม (1)
$foo = 1 + "bob3"; // $foo เป็นจำนวนเต็ม (1)
$foo = 1 + "10 Small Pigs"; // $foo เป็นจำนวนเต็ม ( 11)
$foo = 1 + "10 Little Piggies"; // $foo เป็นจำนวนเต็ม (11);
// สตริงนี้มีอักขระ 'e'
สำหรับข้อมูลเพิ่มเติม โปรดดูส่วนคู่มือ Unix บน strtod(3)