บทนำ
ตัวดำเนินการเพิ่มและลดแบบ C style ที่แทนด้วย ++ และ -- ตามลำดับ ถูกกำหนดใน PHP ด้วย ตามที่ชื่อบ่งชี้ ++ ตัวดำเนินการเพิ่ม (increment operator) เพิ่มค่าตัวถูกดำเนินการขึ้น 1 ตัวดำเนินการลด (Decrement operator) -- ลดค่าลง 1 ทั้งสองเป็น unary operators เนื่องจากต้องการตัวถูกดำเนินการเพียงตัวเดียว ตัวดำเนินการเหล่านี้ (++ หรือ --) สามารถใช้ในรูปแบบ prefix หรือ postfix ได้ ทั้งเป็นนิพจน์เดี่ยวหรือร่วมกับตัวดำเนินการอื่นในนิพจน์ซับซ้อนกว่า
รูปแบบไวยากรณ์
$x=5; $x=5; $y=5; $x++; //postfix increment $y--; //postfix decrement ++$y; //prefix increment --$x; //prefix decrement
เมื่อใช้แยกต่างหาก postfix และ prefix increment/decrement operator จะทำงานคล้ายกัน ดังนั้น $x++ และ ++$x ทั้งคู่เพิ่มค่า $x ขึ้น 1 เหมือนกัน $y-- และ --$y ทั้งคู่อย่างกันลดค่า $y ลง 1
โค้ดต่อไปนี้แสดงผลของตัวดำเนินการเพิ่ม/ลด ในรูปแบบ post/prefix:
ตัวอย่าง
<?php $x=5; $y=5; $x++; //postfix increment $y--; //postfix decrement echo "x = $x y = $y" . "\n"; ++$y; //prefix increment --$x; //prefix decrement echo "x = $x y = $y" . "\n";; ?>
ผลลัพธ์
x = 6 y = 4 x = 5 y = 5
เมื่อใช้ในนิพจน์กำหนดค่า (assignment expression) postfix ++ หรือ -- operator มี precedence ต่ำกว่า = ดังนั้น $a=$x++ ให้ผล $a=$x ตามด้วย $x++ ส่วน prefix ++/-- operators มี precedence สูงกว่า = ดังนั้น $b=--$y ประเมินโดยทำ --$y ก่อน แล้วค่อยมอบหมาย $y ที่ได้ให้ $b
ตัวอย่าง
<?php $x=5; $y=5; $a=$x++; //postfix increment echo "a = $a x = $x" . "\n"; $b=--$y; //prefix decrement echo "b = $b y = $y" . "\n"; ?>
ผลลัพธ์
a = 5 x = 6 b = 4 y = 4
การเพิ่ม/ลดกับตัวแปรตัวอักษร ASCII ก็เป็นไปได้ การเพิ่มจะได้ตัวอักษรถัดไปในชุด ASCII หากการเพิ่มเกินชุด นั่นคือเกิน Z รอบถัดไปของชุด ASCII จะซ้ำ นั่นคือตัวแปรที่มีค่า Z จะเพิ่มเป็น AA ตัวอักษรที่ไม่ใช่ ASCII (นอกเหนือจาก A-Z, a-z และ 0-9) จะถูกข้ามโดยตัวดำเนินการเพิ่ม
ตัวอย่าง
<?php $var='A'; for ($i=1; $i<=3; $i++){ echo ++$var . "\n"; } $var1=1; for ($i=1; $i<=3; $i++){ echo ++$var1 . "\n"; } ?>
ผลลัพธ์
B C D 2 3 4