Operators
ธานินทร์ ธนูนิล 630710038
Operators หรือจะเรียกว่า ตัวดำเนินการ เป็นหนึ่งใน Data Types ที่ใช้ในการดำเนินการต่างๆ เช่น การคำนวณ การเปรียบเทียบ ฯลฯ
ตัวอย่างเช่น ถ้า "4 + 5" เท่ากับ 9 ฉะนั้นแล้ว "4" กับ "5" จะเรียกว่า Operands(ตัวถูกดำเนินการ) แล้ว "+" จะเรียกว่า Operator(ตัวดำเนินการ)
ประเภทของ Operators ต่างๆในภาษา PHP
1. Arithmetic Operators
คือ ตัวดำเนินการทางคณิตศาสตร์ เช่น บวก ลบ คูณ หาร ฯลฯ ใช้เพื่อคำนวณคณิตศาสตร์ทั่วไป
ตัวอย่าง :
+
Addition
$x + $y
ผลรวมของ Operands
-
Subtraction
$x - $y
ผลต่างของ Operands
*
Multiplication
$x * $y
ผลคูณของ Operands
/
Division
$x / $y
ผลหารของ Operands
%
Modulo
$x % $y
เศษของ $a หาร $b.
**
Exponentiation
$x ** $y
$x ยกกำลัง $y
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
<?php
// Define two numbers
$x = 10;
$y = 3;
// Addition
echo "Addition: " . ($x + $y) . "\n";
// Subtraction
echo "Subtraction: " . ($x - $y) . "\n";
// Multiplication
echo "Multiplication: " . ($x * $y) . "\n";
// Division
echo "Division: " . ($x / $y) . "\n";
// Exponentiation
echo "Exponentiation: " . ($x ** $y) . "\n";
// Modulus
echo "Modulus: " . ($x % $y) . "\n";
?>Output
ถ้าสังเกตุดีๆ จะเห็นว่าภาษา PHP และ python การยกกำลังนั้นจะใช้ ** แต่ภาษา Java กับภาษา C นั้นจะไม่รองรับการใช้แบบนี้ ต้องใช้ Math.pow() ใน Java หรือ pow() ใน C เพื่อทำการยกกำลัง
2. Assignment Operators
คือ ตัวดำเนินการที่ทำหน้าที่กำหนดค่าตัวแปรหรือค่าคงที่ โดยปกติแล้วจะมีเครื่องหมาย " = " ในการดำเนินการพื้นฐาน
ตัวอย่าง :
=
Assign
$a = $b
กำหนดให้ค่า $a เท่ากับค่า $b
+=
Add then Assign
$a += $b
ผลบวกเหมือนกับ $a = $a + $b
-=
Subtract then Assign
$a -= $b
ผลลบเหมือนกับ $a = $a - $b
*=
Multiply then Assign
$a *= $b
ผลคูณเหมือนกับ $a = $a * $b
/=
Divide then Assign (quotient)
$a /= $b
ผลหารเหมือนกับ $a = $a / $b
%=
Divide then Assign (remainder)
$a %= $b
หาเศษที่เหลือโดย $a = $a % $b
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
จะเห็นว่า ตัวดำเนินการ Assignment Operators ของทั้ง 4 ภาษานั้นไม่ได้แตกต่างกันเท่าไหร่เลย หรือก็คือ ใช้เหมือนกัน ฉะนั้นจำได้ง่ายเลย ไม่ต้องปวดหัว >_<
3. Comparison Operators
คือ ตัวดำเนินการที่ทำหน้าที่เปรียบเทียบค่าระหว่างสองค่า ไม่ว่าตัวแปรจะเป็นสตริงหรือค่าคงที่ โดยจะให้ผลลัพธ์เป็น Boolean คือ true หรือ false
ตัวอย่าง :
==
Equal
$x == $y
คืนค่า true ถ้า $x เท่ากับ $y
===
Identical
$x === $y
คืนค่า true ถ้า $x เท่ากับ $y และเป็น type เดียวกัน
!=
Not equal
$x != $y
คืนค่า true ถ้า $x ไม่เท่ากับ $y
<>
Not equal
$x <> $y
คืนค่า true ถ้า $x ไม่เท่ากับ $y
!==
Not identical
$x !== $y
คืนค่า true ถ้า $x ไม่เท่ากับ $y หรือไม่ใช่ type เดียวกัน
>
Greater than
$x > $y
คืนค่า true ถ้า $x มากกว่า $y
<
Less than
$x < $y
คืนค่า true ถ้า $x น้อยกว่า $y
>=
Greater than or equal to
$x >= $y
คืนค่า true ถ้า $x มากกว่าหรือเท่ากับ $y
<=
Less than or equal to
$x <= $y
คืนค่า true ถ้า $x น้อยกว่าหรือเท่ากับ $y
<=>
Spaceship
$x <=> $y
คืนค่า -1 ถ่า $x น้อยกว่า $y
คืนค่า 0 ถ่า $x เท่ากับ $y
คืนค่า 1 ถ่า$x มากกว่า $y
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
เมื่อเราสังเกตุจะเห็นว่าภาษา PHP เป็นภาษาเดียวที่มีการใช้ <>, === และ !== โดยภาษาอื่นๆจะใช้ != เป็นการเปรียบเทียบ และการตรวจสอบตัวแปร เช่น Java จะใช้ instanceof ฯลฯ เป็นต้น
4. Increment/Decrement operators
คือ ตัวดำเนินการที่ทำหน้าที่ เพิ่มหรือลดค่าตัวเลข ขึ้นอยู่กับว่าจะอยู่ตำแหน่งก่อนหรือหลังตัวเลข
ตัวอย่าง :
++
Pre-Increment
++$x
เพิ่มค่า $x ไป 1 จากนั้นคืนค่า $x
--
Pre-Decrement
--$x
ลดค่า $x ไป 1 จากนั้นคืนค่า $x
++
Post-Increment
$x++
คืนค่า $x จากนั้นเพิ่มค่า $x ไป 1
--
Post-Decrement
$x--
คืนค่า $x จากนั้นลดค่า $x ไป 1
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
จะเห็นได้ว่า ทุกภาษานั้นจะมีการใช้ Prefix และ Postfix นั้นคือ ++ และ -- ยกเว้น Python จะใช้แค่ += กับ -= ในการเพิ่มลดค่า ทำให้ต้องเพิ่มค่าให้ตัวแปรก่อนเสมอก่อนจะส่งผลลัพธ์ออกมา
5. Logical or Relational Operators
คือตัวดำเนินการแบบ เชิงตรรกะ จะใช้กับคำสั่งที่มีเงื่อนไขหรือเปรียบเทียบค่าระหว่างตัวแปร โดยผลลัพธ์ก็จะเป็นแบบ Boolean เช่นกัน คือ true หรือ false
ตัวอย่าง :
and
And
$x and $y
true ถ้าทั้ง $x และ $y เป็นจริง
or
Or
$x or $y
true ถ้า $x หรือ $y เป็นจริง
xor
Xor
$x xor $y
true ถ้า $x หรือ $y เป็นจริง แต่ต้องไม่ true ทั้งคู่
&&
And
$x && $y
true ถ้าทั้ง $x และ $y เป็นจริง
||
Or
$x || $y
true ถ้า $x หรือ $y เป็นจริง
!
Not
!$x
true ถ้า x ไม่เป็นจริง
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
เห็นได้เลยว่า Python จะไม่เครื่องหมาย Xor โดยจะใช้ != แทน และจะมีภาษา C กับ Java เท่านั้นที่ใช้ ^ เป็นเครื่องหมาย Xor นอกจากนั้นก็ไม่มีอะไรแตกต่างกันมาก
6. String operators
คือ ตัวดำเนินการที่ทำหน้าที่เกี่ยวกับ String หรือใช้ร่วมกับข้อความ มีเพียงสองตัวที่ใช้
ตัวอย่าง :
.
Concatenation
$txt1 . $txt2
ต่อตัวแปร $txt1 กับ $txt2 เข้าด้วยกัน
.=
Concatenation assignment
$txt1 .= $txt2
ต่อตัวแปร $txt2 รวมให้กับ $txt1 ในตัวแปรเดียว
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
การต่อสตริงทั้ง 4 ภาษานี้ค่อนข้างแตกต่างกันเล็กน้อย โดยภาษา Java และ Python จะใช้การต่อสตริงด้วย + และ += ขณะเดียวกันภาษา C จะใช้ strcat() ในการต่อสตริง แต่ก็สามารถใช้ += ได้เช่นกัน สรุปคือ ต่างกันกับ PHP ตรง เครื่องหมาย . มีแค่ใน PHP
7. Array operators
คือตัวดำเนินการที่ทำงานเกี่ยวกับอาเรย์ พวกนี้มักจะใช้ในอาเรย์และเห็นได้ว่าตัวไหนทำงานในอาเรย์
ตัวอย่าง :
+
Union
$x + $y
Union ของ $x และ $y
==
Equality
$x == $y
คืนค่า true ถ้า $x และ $y มีคีย์หรือค่าเหมือนกัน
===
Identity
$x === $y
คืนค่า true ถ้า $x และ $y มีคีย์หรือค่าเหมือนกันในลำดับเดียวกันและประเภทเดียวกัน
!=
Inequality
$x != $y
คืนค่า true $x และ $y ไม่เท่ากัน
<>
Inequality
$x <> $y
คืนค่า true $x และ $y ไม่เท่ากัน
!==
Non-identity
$x !== $y
คืนค่า true $x และ $y ไม่เหมือนกัน
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
โค๊ดทั้ง 4 ภาษานี้มีการเรียกใช้งาน operator แตกกต่างกันอย่างชัดเจน โดยอย่างแรกเลย Java จะใช้ HashMap ในการเก็บคีย์-ค่า ใช้การรวมอาเรย์ด้วย putAll() และใช้การเปรียบเทียบด้วย equals() ต่อมาภาษา C จะมีการใช้ struct และอาศัยฟังก์ชันในการเปรียบเทียบ เนื่องจากภาษา C ไม่มีโครงสร้างข้อมูลเชิงคีย์ สุดท้ายภาษา Python จะใช้ dict ในการรวมจะใช้ **x กับ **y และการเปรียบเทียบจะใช้ == และ !=
8. Conditional or Ternary Operators
คือ ตัวดำเนินการแบบมีเงื่อนไข ใช้เพื่อทำการกำหนดเงื่อนไข มักจะใช้อยู่ในคำสั้ง if - else
ตัวอย่าง :
?:
Ternary
$x = expr1 ? expr2 : expr3
คืนค่า $x
ค่าของ $x จะเป็น expr2 ถ้า expr1 เป็น true ไม่งั้นจะเป็น expr3 ถ้า expr1 เป็น false
??
Null coalescing
$x = expr1 ?? expr2
คืนค่า $x
ค่าของ $x จะเป็น expr1 ถ้า expr1 เป็นจริง และไม่เป็น Null
ถ้า expr1 ไม่เป็นจริง หรือเป็น Null ค่าของ $x จะเป็น expr2
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
ในภาษา C นั้นจะไม่มี Null Operator จะใช่ if-else ในการตรวจแทน ส่วน Java มีแต่ ?: ไม่มี Null Operator ต้องใช้ != null ในการตรวจสอบ ส่วน Python จะใช้ or ในการตรวจสอบ null
9. Bitwise Operators
คือตัวดำเนินการที่ทำงานในระดับบิต ของตัวเลขจำนวนเต็ม มีความแตกต่างกันกับ Logical Operators มักใช้เกี่ยวกับการจัดการที่เกี่ยวของกับบิต เช่น การปรับเปลี่ยนค่าในหน่วยความจำ
ตัวอย่าง :
&
And
$a = 6; $b = 3; echo $a & $b;
AND บิตต่อบิต (ทั้งสองบิตต้องเป็น 1)
|
Or (inclusive or)
OR บิตต่อบิต (บิตใดบิตหนึ่งเป็น 1)
OR บิตต่อบิต (บิตใดบิตหนึ่ง บิตต้องเป็น 1)
^
Xor (exclusive or)
$a = 6; $b = 3;
echo $a ^ $b;
บิตต่อบิต (บิตต่างกันให้ 1)
~
Not
$a = 6;
echo ~ $a;
NOT บิต (กลับบิตทั้งหมด)
<<
Shift left
$a = 3;
echo $a << 1
เลื่อนบิตไปทางซ้าย (เติม 0)
>>
Shift right
$a = 6;
echo $a >> 1;
เลื่อนบิตไปทางขวา (ทิ้งบิตด้านขวา)
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
จะเห็นได้ว่า ทั้ง 4 ภาษานั้นไม่ได้แตกต่างกันเลย ฉะนั้นจึงสรุปได้ว่า Bitwise Operators ทั้ง 4 ภาษานั้นใช้เหมือนกัน เป็นมาตรฐานของการจัดการหน่วยความจำ
10. Type Operators
มีอยู่ตัวเดียว คือ ตัวดำเนินการ instanceof มีไว้เพื่อตรวจสอบว่าอ็อบเจ็กต์ พาเรนต์ และคลาสที่ได้นั้นเป็นประเภทเดียวกันหรือไม่ ใช้ในเขียนโปรแกรมเชิงวัตถุ
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
จากโค๊ดจะเห็นว่าภาษา Java และ Python จะมี instanceof เหมือนกัน โดย Python จะใช้ isinstance() ส่วนภาษา C นั้นจะไม่มี instanceof แต่ใช่โครงสร้างจำลอง OOP แทน
11. Execution Operators
คือตัวดำเนินการที่เรียกใช้งานคำสั่งของระบบปปฏิบัติการ(ใม่ใช่ single-quotes) จะเหมือนกับ shell_exec().
ตัวอย่าง :
` `
backticks
echo dir;
ดำเนินการ shell command และส่งผลลัพธ์
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
จะเห็นได้จากโค๊ดสั้นๆนี้ว่าแต่ละภาษาเรียกใช้งานแตกต่างกัน โดนภาษา Java จะใช้ Runtime.getRuntime().exec() ภาษา C จะใช้ system() ส่วน Python จะใช้ os.popon()
12. Error Control Operators
คือตัวดำเนินที่จะทำหน้าที่ปิดบังการแสดงข้อความแจ้งเตือน หรือข้อผิดพลาด ของคำสั่งหรือฟังก์ชัน
ตัวอย่าง :
@
at
@file ('non_existent_file')
ปิดบังไฟล์ที่ผิดพลาด
ตัวอย่างโค๊ดเปรียบเทียบภาษา PHP, Java, C และ Python :
Output
เห็นได้ว่า ภาษา Python จะใช้ @ เหมือนกัน แต่ต่างตรงที่ใช้ try-catch และ try-except เช่นเดียวกับ Java ส่วน C นั้นจะไม่มี เลยใช้การตรวจสอบด้วยฟังก์ชันแทน
PHP Operators Precedence(ลำดับความสำคัญ)
คือ การจัดลำดับการทำงานของตัวดำเนินการ โดยตัวดำเนินการที่มีลำดับความสำคัญมากที่สุดจะทำงานก่อนตัวดำเนินการที่มีลำดับความสำคัญน้อย นี่คือตารางที่ตัวข้างบนจะมีความสำคัญมากกว่าเรียงลงไปข้างล่าง
ตัวอย่าง :
(n/a)
clone new
clone and new
right
**
arithmetic
(n/a)
++ -- ~ (int) (float) (string) (array) (object) (bool) @
arithmetic (unary + and -), increment/decrement, bitwise, type casting and error control
left
instanceof
type
(n/a)
!
logical
left
* / %
arithmetic
left
* - .
arithmetic (binary + and -), array and string (. prior to PHP 8.0.0)
left
<< >>
bitwise
left
.
string (as of PHP 8.0.0)
non-associative
<<= >>=
comparison
non-associative
== != === !== <> <=>
comparison
left
&
bitwise and references
left
^
bitwise
left
|
bitwise
left
&&
logical
left
||
logical
right
??
null coalescing
non-associative
?:
ternary (left-associative prior to PHP 8.0.0)
right
= += -= *= **= /= .= %= &= |= ^= <<= >>= ??=
assignment
(n/a)
yield from
yield from
(n/a)
yield
yield
(n/a)
left
and
logical
left
xor
logical
left
or
logical
Video :
Presentation :
Reference :
PHP Operators. (n.d.). In W3school.
https://www.w3schools.com/php/php_operators.asp
Language Reference Operators. (n.d.) In php.
https://www.php.net/manual/en/language.operators.php
PHP Operator. (2024, June 5). In geeksforgeeks.
https://www.geeksforgeeks.org/php-operators/?ref=header_outind
PHP Operator. (n.d.). In javatpoint.
https://www.javatpoint.com/php-operators#Type
PHP - Operators Types. (n.d.). Intutorialspoint.
https://www.tutorialspoint.com/php/php_operator_types.htm
Exploring PHP Operators. (n.d.). mrExamples.
Last updated