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

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา 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 หรือใช้กับคำสั่งควบคุมของโปรแกรม และลำดับความสำคัญของตัวดำเนินการ


บทความเกี่ยวกับ ตัวดำเนินการ

ตัวดำเนินการ ในภาษา C

ตัวดำเนินการจะถูกใช้กับตัวแปรและค่าคงที่ในการดำเนินการบางอย่าง เช่น การดำเนินการทางคณิตศาสตร์ ในภาษา C มีตัวดำเนินการประเภทต่างๆ ที่ทำหน้าที่แตกต่างกันไปข้างล่า...

ตัวดำเนินการ ในภาษา C#

ตัวดำเนินการ คือเครื่องหมายที่ใช้เพื่อให้ทำงานกับตัวแปรและค่าคงที่เพื่อสร้าง expression ในการเขียนโปรแกรม ในภาษา C#มีตัวดำเนินการประเภทต่างๆ ที่คุณจะต้องรู้จักก...

ตัวดำเนินการ ในภาษา Java

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับตัวดำเนินการในภาษา Java และการใช้งานตัวดำเนินการ ในภาษา Java มีตัวดำเนินการประเภทต่างๆ ดังนี้ String concatenating operator หรื...

ตัวดำเนินการ ในภาษา Visual Basic

ตัวดำเนินการ ใช้สำหรับจัดการกับตัวแปรและค่าคงที่ ยกตัวอย่างเช่น การกำหนดค่า การเปรียบเทียบข้อมูล ตัวดำเนินการในภาษา Visual Basic นั้นมีหลายรูปแบบ นี่เป็นตัวดำเน...

ตัวดำเนินการ ในภาษา C++

ตัวดำเนินการถูกใช้เพื่อดำเนินการกับตัวแปรและค่าคงที่ ในภาษา C++ มีตัวดำเนินการประเภทต่างๆ นี่เป็นตัวดำเนินการที่สำคัญที่คุณจะต้องรู้จัก ตัวดำเนินการกำหนดค่านั้น...