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