ตัวดำเนินการ

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา PHP เราจะให้คุณรู้จักตัวดำเนินการแต่ละประเภทและวิธีการใช้งานกับการเขียนโปรแกรมในรูปแบบต่างๆ

ตัวดำเนินการ คือเครื่องหมายหรือสัญลักษณ์ที่กำหนดขึ้นสำหรับใช้ในการจัดการกับตัวแปรและค่าคงที่ หรือสร้าง Expression ขึ้นและนำไปใช้งานในการเขียนโปรแกรม ตัวดำเนินการในภาษา PHP มีหลายรูปแบบซึ่งในบทนี้ เนื้อหาได้แบ่งย่อยออกเป็นดังนี้

  • Assignment operator
  • Arithmetic operators
  • Compound assignment
  • Comparison Operators
  • Logical operators
  • Bitwise operators
  • String Concatenation Operator
  • Ternary Operator
  • Operators' precedence

เราจะเริ่มกับตัวดำเนินการที่พื้นฐานที่สุดในภาษา PHP ตัวดำเนินการกำหนดค่า

Assignment operator

ตัวดำเนินการกำหนดค่า (Assignment operator) คือตัวดำเนินการที่ใช้สำหรับกำหนดค่าให้กับตัวแปรหรือค่าคงที่ เครื่องหมายเท่ากับ = ใช้เป็นสัญลักษณ์ของตัวดำเนินการนี้ การทำงานของตัวดำเนินการนั้นจะนำค่าจากด้านขวามาใส่ตัวแปรทางด้านซ้าย

$x = 1;
$y = $x + 5;
$text = "PHP language";

ในตัวอย่างเป็นการใช้งานตัวดำเนินการกำหนดค่าในการกำหนดค่าให้กับตัวแปรในภาษา PHP เราได้กำหนดค่า 1 ให้กับตัวแปร $x เรากำหนดค่าให้กับตัวแปร $y ในรูปแบบของ Expression และกำหนด String ให้กับตัวแปร $text

นี่เป็นการดำเนินการที่พื้นฐานที่สุดในการเขียนโปรแกรม

Arithmetic operators

ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic operators) เป็นตัวดำเนินการในการหาผลลัพธ์จากการกระทำทางคณิตศาสตร์ เช่น การบวก การลบ การคูณ และหารหาร โดยมีตัวเลขเป็น Operand และจะได้ผลลัพธ์สุดท้ายออกมาค่าเดียว

นี่เป็นตารางตัวดำเนินการทางคณิตศาสต์ในภาษา PHP

SymbolNameExample
+Addition$c = $a + $b
-Subtraction$c = $a - $b
*Multiplication$c = $a * $b
/Division$c = $a / $b
%Modulo$c = $a % $b

ใน 4 ตัวดำเนินการแรกนั้นเป็นตัวดำเนินการพื้นฐานในทางคณิตศาสตร์ แต่ในตัวดำเนินการสุดท้าย Modulo นั้นเป็นการหารแบบเอาเศษ ต่อไปเป็นตัวอย่างการใช้ตัวดำเนินการแบบต่างๆ

<?php

$price = 150;
$tax_rate = 10;

$tax_price = $price * ($tax_rate / 100);
$total_price = $price + $tax_price;

echo "Item with price $price\n";
echo "Tax rate $tax_rate%\n";
echo "Price increased by tax $tax_price\n";
echo "Total price = $total_price\n";

?>

ในตัวอย่างเป็นโปรแกรมในการคำนวณหาภาษามูลค่าเพิ่มจากการซื้อสิ้นค้า โดยเรามีราคาของสิ้นค้าที่ยังไม่รวมภาษาษีและอัตราของภาษา และคำนวณสำหรับราคาทั้งหมดที่ต้องจ่ายหลังจากรวมกับภาษีแล้ว

$price = 150;
$tax_rate = 10;

ตัวแปร $price นั้นเป็นราคาสิ้นค้าที่ยังไม่ได้รวมกับภาษี และตัวแปร $tax_rate เป็นอัตราภาษีต่อ 100% และคุณสามารถเปลี่ยนค่าของตัวแปรเหล่านี้ได้

$tax_price = $price * ($tax_rate / 100);
$total_price = $price + $tax_price;

ในตัวแปร $tax_priceเป็นการคำนวณหาราคาที่เพิ่มขึ้นมาจากภาษี และ $total_price เป็นการหาราคาทั้งหมดเมื่อรวมกับภาษีแล้ว

Item with price 150
Tax rate 10%
Price increased by tax 15
Total price = 165

นี่เป็นผลลัพธ์ของโปรแกรม ซึ่งอธิบายได้ว่าเมื่อคุณซื้อของในราคา 150 และมีภาษี 10% ราคาทั้งหมดที่คุณจะต้องจ่ายหลังจากรวมภาษีแล้วคือ 165

<?php

$total_second = 340;

$minute = floor($total_second / 60);
$second = $total_second % 60;

echo "$total_second seconds\n";
echo "$minute minutes $second seconds";

?>

ตัวอย่างต่อมาเป็นการใช้เครื่องหมาย Modulo ในการหาเศษของเวลา เรามีตัวแปร $total_second สำหรับเก็บค่าวินาทีทั้งหมด โปรแกรมของเราเป็นการแปลงมาเป็นในรูปแบบ นาทีและวินาที

$minute = floor($total_second / 60);
$second = $total_second % 60;

เราหาค่าของนาทีโดยการหารด้วย 60 และใช้ฟังก์ชัน floor() เพื่อตัดเศษทศนิยมออกไป สำหรับหาค่าวินาที เราใช้การหารเอาเศษโดยตัวดำเนินการ Modulo เพราะว่าวินาทีที่เหลือคือการนำไปหาเศษจากการหารด้วย 60 ใน Expression $total_second % 60

340 seconds
5 minutes 40 seconds

นี่เป็นผลลัพธ์เมื่อรันโปรแกรม ที่แปลงจากวินาทีทั้งหมดเป็นนาทีและวินาที

Bitwise operators

ตัวดำเนินการระดับบิต (Bitwise operators) คือตัวดำเนินการที่มีการกระทำกันในระดับบิตของข้อมูลซึ่งมีแค่ 1 และ 0 นี่เป็นโครงสร้างของภาษาที่ถ่ายทดมาจากภาษา C ในการทำงานของตัวดำเนินการระดับบิตเป็นการนำคู่ของบิตมากระทำต่อกันในทางตรรกศาสตร์และได้ผลลัพธ์เป็นบิตใหม่ ส่วนมากแล้วมันมักจะใช้กับการเขียนโปรแกรมในระดับต่ำ

นี่เป็นตารางตัวตัวดำเนินการระดับบิตในภาษา PHP

SymbolNameExample
&And$c = $a & $b
|Or$c = $a | $b
^Xor$c = $a ^ $b
~Not$c = ~$b
<<Shift left$c = $a << $b
>>Shift right$c = $a >> $b

เพื่อให้คุณเข้าใจหลักการทำงานของตัวดำเนินการระดับบิต มาดูตัวอย่างการใช้งานตัวดำเนินการระดับบิตในภาษา PHP คุณจะต้องเข้าใจในหลักการของประพจน์ในคณิตศาสตร์สำหรับการใช้งานตัวดำเนินการนี้

<?php

$a = 8;
$b = 3;

echo "a & b = ", $a & $b, "\n";
echo "a | b = ", $a | $b, "\n";
echo "a ^ b = ", $a ^ $b, "\n";
echo "~a = ", ~$a, "\n";
echo "a << 1 = ", $a << 1, "\n";
echo "a >> 1 = ", $a >> 1, "\n";

?>

ในตัวอย่างเป็นการใช้ตัวเนินการระดับบิตกับ Integer เรามีตัวแปร $a และ $b ซึ่งเก็บค่าตัวเลข ในการทำงานของตัวดำเนินการเหล่านี้ ตัวเลขถูกแปลงในรูปแบบของ Binary ที่มีขนาดเท่ากันดังนี้

1000 = 8
0011 = 3

ในการคำนวณหา $a & $b เราจะทำการเปรียบเทียบในแต่ละคู่ของบิตที่ตรงกัน เนื่องจากตัวดำเนินการ & ผลลัพธ์ทีไ่ด้จะเป็น 1 ถ้าหากบิตทั้งสองเป็น 1 ไม่เช่นนั้นจะเป็น 0 เราจึงคำนวณได้ 1 & 0 = 0, 0 & 0 = 0, 0 & 1 = 0 และ 0 & 1 = 0 หลังจากเสร็จสิ้นทั้ง 4 บิตเรานำผลลัพธ์ของแต่ละบิตมารวมกันจะได้ 0000 ดังนั้น 8 & 3 จึงมีค่าเท่ากับ 0 ในฐานสิบ

ต่อมาเราคำนวณหาสำหรับ $a | $b ผลลัพธ์ที่ได้ถ้าหากบิตใดบิตหนึ่งมีค่าเป็น 1 จะได้ผลลัพธ์เป็น 1 นอกจากนี้จะได้ผลลัพธ์เป็น 0 จะได้ 1000 | 0011 = 1011 ดังนั้น 8 | 3 จึงมีค่าเท่ากับ 11 ในฐานสิบ

สำหรับ $a ^ $b ผลลัพธ์ที่ได้จะเป็นจริงถ้าหากบิตใดบิตหนึ่งเป็น 1 หรือ 0 แต่ไม่ใช้ทั้งสอง ทำให้เราได้ 1000 | 0011 = 1011 ดังนั้น 8 | 3 จึงมีค่าเท่ากับ 11 ในฐานสิบ

สำหรับ ~$a เป็นการนำบิตมาผันกลับจาก 1 ไป 0 และ 0 ไป 1 จะได้ ~1000 = 0111 ซึ่งมีค่าเป็น 7 ในฐานสิบ

สำหรับ $a << 1 เป็นการเลื่อนบิตไปทางซ้าย 1 บิต บิตทางขวาที่เพิ่มเข้ามาจะเป็น 0 เสมอ จะได้ 1000 << 1 = 10000 ซึ่งมีค่าเท่ากับ 16 ในฐาน 10 ในการใช้ตัวดำเนินการนี้ค่าจะเพิ่มขึ้นเป็น 2 เท่าในการเลื่อนบิตไปทางซ้าย 1 ครั้ง

สำหรับ $a >> 1 เป็นการเลื่อนบิตไปทางขวา 1 บิต บิตทางขวาที่เพิ่มเข้ามาจะเป็น 0 เสมอ จะได้ 1000 >> 1 = 0100 ซึ่งมีค่าเท่ากับ 4 ในฐาน 10 ในการใช้ตัวดำเนินการนี้ค่าจะลดลงครึ่งหนึ่งในการเลื่อนบิตไปทางขวา 1 ครั้ง

a & b = 0
a | b = 11
a ^ b = 11
~a = -9
a << 1 = 16
a >> 1 = 4

นี่เป็นผลลัพธ์จากการใช้ตัวดำเนินการระดับบิต

Compound assignment

Compound assignment operators คือตัวดำเนินการที่รวมระหว่างตัวดำเนินการทางคณิตศาสตร์และตัวดำเนินการกำหนดค่า มันใช้สำหรับอัพเดทข้อมูลที่อ้างอิงจากข้อมูลในปัจจุบัน หรือกล่าวอีกนัยหนึ่ง มันเป็นรูปแบบที่สั้นกว่าของตัวดำเนินการทางคณิตศาสตร์

นี่เป็นตารางสำหรับ Compound assignment operators ในภาษา PHP

OperatorExampleEquivalent to
+=$a += 2;$a = $a + 2
-=$a -= 2;$a = $a - 2
*=$a *= 2;$a = $a * 2
/=$a /= 2;$a= $a / 2
%=$a %= 2;$a = $a % 2
>>=$a >>= 2;$a = $a >> 2
<<=$a <<= 2$a = $a << 2
&=$a & = 2;$a = $a & 2
^=$a ^= 2;$a= $a ^ 2
|=$a |= 2;$a = $a | 2

ต่อไปมาดูตัวอย่างการใช้งาน Compound assignment operators ในภาษา PHP โดยจะเป็นโปรแกรมในการบันทึกความคืบหน้าของการสร้างตึก

<?php

$floor = 0;
echo "Building is being constructed.\n";

$floor += 3;
echo "First day finished $floor floors.\n";

$floor += 5;
echo "Second day finished $floor floors.\n";

$floor += 4;
echo "Third day finished $floor floors.\n";

$floor += 2;
echo "Forth day finished $floor floors .\n";

?>

ในตัวอย่าง เป็นโปรแกรมแสดงการทำงานของการสร้างตึก ตัวแปร $floor สำหรับเก็บค่าจำนวนชั้นของตึกที่ทำการสร้างเสร็จแล้ว ในแต่ละวันที่ทำการสร้างตึกเสร็จ จะนำจำนวนชั้นใหม่ไปบวกเพิ่มกับวันก่อนหน้า เช่น ในวันแรกสร้างเสร็จไป 3 ชั้นจะได้ $floor += 3; ซึ่งตัวดำเนินการเหล่านี้เป็นรูปแบบที่สั้นขึ้นจาก $floor = $floor + 3; นี่คือการลดการใช้ Operand ที่ไม่จำเป็นออกไป ในการเขียนคุณสามารถใช้แบบไหนก็ได้

Building is being constructed.
First day finished 3 floors.
Second day finished 8 floors.
Third day finished 12 floors.
Forth day finished 14 floors.

นี่เป็นผลลัพธ์เมื่อรันโปรแกรม

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับตัวดำเนินการในเบื้องต้นในภาษา PHP เช่น ตัวดำเนินการกำหนดค่า ตัวดำเนินการทางคณิตศาสตร์ ตัวดำเนินการระดับบิต ดัวดำเนินการ Compound assignment ในบทต่อไป จะเป็นเนื้อหาของตัวดำเนินการที่ใช้ในการสร้าง Expression หรือใช้กับคำสั่งควบคุมของโปรแกรม และลำดับความสำคัญของตัวดำเนินการ