PHP เบื้องต้น > ภาษา PHP
Operator
Operator เป็นสัญลักษณ์ที่สามารถใช้ ควบคุมค่าและตัวแปรโดยการทำงาน เช่น ต้องการใช้ operator นี้ เพื่อประมวลผลรวมและภาษีของใบสั่งซื้อ
โดยทั่วไป operator สามารถใช้ อากิวเมนต์ 1 ตัวถึง 3 ตัว แต่ส่วนมากคือ 2 อากิวเมนต์ เช่น operator กำหนดค่าใช้ 2 ตำแหน่ง เก็บค่าอยู่ด้านซ้ายมือของเครื่องหมาย = และนิพจน์อยู่ด้านขวา อากิวเมนต์เหล่านี้เรียกว่า operand
Operator เลขคณิต
operator เลขคณิตมีลักษณะตรงไปตรงมาเหมือน operator คณิตศาสตร์ปกติ และแสดงในตาราง 1.2.1
ตาราง 2.2.1 operator เลขคณิต
Operator |
ชื่อ |
ตัวอย่าง |
+ |
การบวก |
$a + $b |
- |
การลบ |
$a - $b |
* |
การคูณ |
$a * $b |
/ |
การหาร |
$a / $b |
% |
modulus |
$a % $b |
operator สามารถเก็บ ผลลัพธ์ของ operation ตัวอย่างเช่น
$result = $a + $b;
การบวกและลบทำงานได้ตามปกติ ผลลัพธ์ของ operator เหล่านี้คือ การเพิ่มหรือการลบ ตามค่าที่เก็บในตัวแปร $a และ $b
modulus ส่งออก เศษจากการหาร $a ด้วยตัวแปร $b
$a = 27;
$b = 10;
$result = $a%$b;
ค่าที่เก็บในตัวแปร $result คือ เศษ เมื่อหาร 27 ด้วย 10 คือ 7
operator เลขคณิตใช้กับ ตัวเลข ถ้าประยุกต์กับข้อความ PHP จะพยายามและแปลงข้อความเป็นตัวเลข ถ้าตัวแปรเก็บอักษร "e" หรือ "E" จะได้รับการแปลงเป็น float กรณีอื่นจะได้รับการแปลงเป็น integer โดย PHP จะมองหาตัวเลขเริ่มต้นข้อความและใช้เป็นค่า ถ้าไม่ใช่ ค่าของข้อความจะเป็นศูนย์
Operator ข้อความ
Operator ข้อความ มี 1 operator คือ จุด (.) โดยสามารถใช้ operator ต่อข้อความ 2 ข้อความเพื่อสร้างและเก็บผลลัพธ์เหมือนกับการบวกเลข 2 จำนวน
$a = "พูน"
$b = "พนา"
$result = $a.$b
ตัวแปร $result จะเก็บข้อความ "พูนพนา"
Operator กำหนดค่า
เครื่องหมายเท่ากับ (=) เป็น operator กำหนดค่าพื้นฐาน ตามปกติการอ้างอิงในฐานะ operator กำหนดค่า และอ่านฐานะ "การตั้งค่า" ตัวอย่างเช่น
$totalqty = 0;
สามารถอ่านได้เป็น "$totalqty ตั้งค่าเป็นศูนย์"
การส่งออกค่าจากการกำหนดค่า
การใช้ operator กำหนดค่า ส่งออกค่าทั้งหมดคล้ายกับ operator อื่น ถ้าเขียนว่า
$a + $b;
ค่าของนิพจน์นี้ คือ ผลลัพธ์ของการบวกตัวแปร $a และ $b เหมือนกับการเขียน
$a = 0;
สามารถเขียนคำสั่งในลักษณะนี้
$b = 6 + ($a=5);
$b ได้รับการตั้งค่าเป็น 11 ค่าของประโยคคำสั่งกำหนดค่าทั้งหมด คือ ค่าที่กำหนดให้กับ operand ด้านซ้าย เมื่อทำงานกับค่าของนิพจน์ วงเล็บสามารถใช้เพิ่มนิพจน์ย่อย ซึ่งทำงานเหมือนวิธีการทางเลขคณิต
การผสม Operator กำหนดค่า
นอกจาก การใช้กำหนดค่าอย่างง่าย มีชุดของการผสม operator กำหนดว่า แต่ละชุด คือ วิธีการย่อของการประมวลผลตัวแปรและกำหนดค่าแล้วส่งกลับไปยังตัวแปรนั้น ตามตาราง 1.2.2
ตาราง 1.2.2 การผสม operator กำหนดค่า
Operator |
การใช้ |
เทียบเท่ากับ |
+= |
$a+=$b |
$a=$a + $b |
-= |
$a-=$b |
$a=$a - $b |
*= |
$a*=$b |
$a=$a * $b |
/= |
$a/=$b |
$a=$a / $b |
%= |
$a%=$b |
$a=$a % $b |
.= |
$a.=$b |
$a=$a.$b |
ตัวอย่าง เช่น
$a +=5;
เทียบเท่ากับการเขียนว่า
$a = $a + 5;
การผสม operator กำหนดค่า มีอยู่จริงสำหรับ แต่ละ operator คณิตศาสตร์ และ operator ต่อข้อความ
การเพิ่มและการลด ก่อนและหลัง
operator การเพิ่ม(++) และ การลด(- -) ก่อน และ หลัง คล้ายกับ += และ -= แต่เป็นเครื่องหมายคู่
operator การเพิ่ม ทั้งหมด มี 2 ผลกระทบ คือ เพิ่มและกำหนดค่า เช่น
$ a;
echo ++$a;
บรรทัดที่ 2 ใช้ operator การเพิ่มก่อน เรียกแบบนี้ เพราะ ++ ปรากฎก่อน $a ผลกระทบแรก คือ เพิ่ม $a ด้วย 1 และผลกระทบที่ 2 คือ ส่งออกค่าเพิ่มขึ้น ในกรณีนี้ $a คือ การเพิ่มเป็น 5 แล้ว ส่งออก 5 และพิมพ์ผลลัพธ์ ค่าของนิพจน์ทั้งหมด คือ 5 (ข้อสังเกต ค่าที่เก็บใน $a มีการเปลี่ยนแปลง และไม่ใช่การส่งออกค่าด้วย $a+1)
ถ้า ++ อยู่หลัง $a คือ การใช้ operator การเพิ่มภายหลัง ที่มีผลกระทบแตกต่างกัน เช่น
$a;
echo $a++;
กรณีนี้ ผลกระทบกลับกัน ผลกระทบแรก ค่าของ $a ได้รับการส่งออกและพิมพ์ ผลกระทบที่ 2 เพิ่มค่าตัวแปร ค่าของนิพจน์ทั้งหมด คือ 4 นี่เป็นค่าที่ได้รับการส่งออก อย่างไรก็ตาม ค่าของ $a หลังจากประโยคคำสั่งได้รับการประมวลผล คือ 5
ลักษณะของ - - ทำงานได้ในแบบเดียวกัน เพียงแต่ว่าค่าของ $a ลดลง แทนที่การเพิ่ม
Operator เปรียบเทียบ
Operator เปรียบเทียบใช้เปรียบเทียบ 2 ค่า นิพจน์ใช้ operator เหล่านี้ส่งออกค่าทางตรรกะเป็น TRUE หรือ FALSE ขึ้นกับผลลัพธ์ของการเปรียบเทียบ
Operator เท่ากับ
operator เท่ากับ (==) ใช้ในการทดสอบ ค่าเท่ากันของ 2 ค่า เช่น
$a == $b;
ทดสอบค่าที่เก็บอยู่ใน $a และ $b เหมือนกันการส่งออกผลลัพธ์โดยนิพจน์นี้จะเป็น TRUE ถ้าค่าเท่ากัน หรือ FALSE ถ้าไม่เท่ากัน สิ่งนี้ทำให้สับสนกับ = (operator กำหนดค่า) โดยการทำงานไม่มีความผิดพลาด แต่จะไม่ให้ผลลัพธ์ความต้องการ โดยทั่วไป ค่าไม่ใช่ศูนย์ ได้รับการประเมินเป็น TRUE และ ศูนย์ ได้รับการประเมินเป็น FALSE ตัวอย่าง
$a = 5;
$b = 7;
ถ้าทดสอบ $a = $b ผลลัพธ์ คือ TRUE เนื่องจาก ค่าของ $a = $b คือ การกำหนดค่าให้กับซ้ายมือ ในกรณีนี้ คือ 7 ค่านี้ไม่ใช่ศูนย์ ดังนั้นจึงได้รับการประเมินเป็น TRUE ถ้าตั้งใจทดสอบด้วย $a = = $b ซึ่งได้ค่าเป็น FALSE
ทำให้ต้องตรวจสอบความผิดพลาดทางตรรกะที่ทำได้ยาก ดังนั้นควรมีการตรวจสอบการใช้ 2 operator นี้
Operator เปรียบเทียบอื่น
PHP สนับสนุน operator เปรียบเทียบหลายตัว ตามที่ได้สรุป operator เปรียบเทียบในตาราง 1.2.3
ตาราง 1.2.3 Operator เปรียบเทียบ
Operator |
ชื่อ |
การใช้ |
== |
เท่ากับ |
$a == $b |
=== |
เอกลักษณ์ |
$a === $b |
!= |
ไม่เท่ากับ |
$a!=$b |
<> |
ไม่เท่ากับ |
$a<>$b |
< |
น้อยกว่า |
$a<$b |
> |
มากกว่า |
$a>$b |
<= |
น้อยกว่าหรือเท่ากับ |
$a<=$b |
>= |
มากกว่าหรือเท่ากับ |
$a>=$b |
หมายเหตุ operator เอกลักษณ์ (===) จะส่งออก TRUE ถ้า 2 operator เท่ากันและเป็นประเภทข้อมูลเดียวกัน
Operator ตรรกะ
operator ตรรกะ ใช้รวม ผลลัพธ์ของเงื่อนไขทางตรรกะ ตัวอย่าง เช่น มีความสนใจ ค่าของตัวแปร $a ระหว่าง 0 ถึง 100 ต้องทดสอบเงื่อนไข $a>=0 และ $a<=0 ด้วยการใช้ AND
$a>=0 && <=100
PHP สนับสนุน AND, OR, XOR (ไม่รวม OR) และ NOT โดยชุดของ operator ตรรกะ ได้สรุปในตาราง 1.2.4
ตาราง 1.2.4 Operator ตรรกะ
Operator |
ชื่อ |
การใช้ |
ผลลัพธ์ |
! |
NOT |
!$b |
ส่งออก TRUE ถ้า $b เป็น FALSE |
&& |
AND |
$a && $b |
ส่งออก TRUE ถ้า $a และ $b เป็น TRUE
กรณีอื่น FALSE |
|| |
OR |
$a || $b |
ส่งออก TRUE ถ้า $a หรือ $b หรือทั้งคู่เป็น TRUE
กรณีอื่น FALSE |
and |
AND |
$a and $b |
เหมือนกับ && แต่มีระดับต่ำกว่า |
or |
OR |
$a or $b |
เหมือนกับ // แต่มีระดับต่ำกว่า |
หมายเหตุ and และ or มีระดับต่ำกว่า && และ ||
Bitwise Operator
Bitwise Operator ทำให้สามารถปฏิบัติกับเลขจำนวนเต็ม เป็นชุดของบิตที่นำเสนอ บางครั้งอาจจะพบการใช้ operator เหล่านี้ไม่มากใน PHP แต่ได้สรุป bitwise operator ในตาราง 1.2.5
ตาราง 1.2.5 bitwise operator
Operator |
ชื่อ |
การใช้ |
ผลลัพธ์ |
& |
bitwise AND |
$a & $b |
ชุดบิตใน $a และ $b เป็นชุดในผลลัพธ์ |
/ |
bitwise OR |
$a / $b |
ชุดบิตใน $a หรือ $b เป็นชุดในผลลัพธ์ |
|
bitwise NOT |
$a |
ชุดบิตใน $a ไม่เป็นชุดในผลลัพธ์ |
^ |
bitwise XOR |
$a^$b |
ชุดบิตใน $a หรือ $b แต่ไม่ใช่ทั้งคู่เป็นชุดในผลลัพธ์ |
<< |
เลื่อนไปทางซ้าย |
$a<<$b |
เลื่อน $a ไปทางซ้ายของบิต $b |
>> |
เลื่อนไปทางขวา |
$a>>$b |
เลื่อน $b ไปทางขวาของบิต $b |
Operator อื่น
นอกจากนี้ operator อื่นที่มีการใช้งาน ได้แก่
- จุลภาค (,) ใช้แบ่งอากิวเมนต์ ของฟังก์ชัน และรายงานหน่วยข้อมูล
- Operator พิเศษ new และ -> ใช้ instance กับ class และ เข้าถึงสมาชิกของ class
- Array operator ([ ]) สามารถใช้เข้าถึง array
มี operator อีก 3 ตัว ที่จะกล่าวถึงต่อไป
Ternary Operator
? เป็น Operator ทำงานด้วยวิธีเดียวกับการทำงานในภาษา C มีรูปแบบ คือ
condition? value if TRUE : value if FALSE
Ternary operator เหมือนกับ นิพจน์ในประโยคคำสั่ง if else ตัวอย่าง
($grade > 50? "Passed": "Failed")
นิพจน์นี้ประเมินเกรดนักศึกษาเป็น "Passed" หรือ "Failed"
Error Suppression Operator
Error suppression operator (@) สามารถใช้หน้านิพจน์ที่สร้างหรือมีค่า เช่น
$ = @(57/0)
ถ้าปราศจาก @ บรรทัดนี้จะสร้างคำเตือน หารด้วยศูนย์แต่ด้วย operator นี้ ข้อผิดพลาดจะถูกปิดบัง
Execution Operator
execution operator เป็นคู่ของ operator คือ คู่ของ backtick ( ) โดย backtick ไม่ใช่ single quote ตามปกติอยู่ที่แป้นพิมพ์ เดียวกับสัญลักษณ์ ~ (tilde)
PHP จะพยายามประมวลผลสิ่งที่อยู่ระหว่าง backtick เหมือนคำสั่งในประโยคคำสั่ง ค่าของนิพจน์ เป็นผลลัพธ์ของคำสั่ง
ตัวอย่างเช่น ระบบปฏิบัติการ UNIX
$out = ls la;
echo "<pre>".$out. "</pre>";
หรือ เท่ากับ ระบบปฎิบัติการ Windows
$out = dir C:;
echo "<pre>".$out. "</pre>";
เวอร์ชันเหล่านี้จะเก็บรายงานไดเรคทอรีและเก็บใน $out จากนั้นส่งให้ browser หรือติดต่อในวิธีอื่น
ลำดับการทำงานของ Operator
ในทางปฏิบัติมักจะมีนิพจน์ที่ประกอบด้วยหลาย operator ตามปกตินิพจน์ในการการประเมินนิพจน์ในวงเล็บเป็นหน่วยเดียวก่อน จากนั้นจึงย้ายออกมาประเมินภายนอก ตัวอย่าง
($a + $b) * $c
การคำนวณจะบวก $a กับ $b แล้วคูณผลบวกด้วย $c
นอกจากนี้ operator มีลำดับความสำคัญในการประเมินต่างกัน โดยโปรแกรมจะประเมินก่อนหรือหลังตามลำดับความสำคัญของ operator และวิธีการประเมินของแต่ละ operator ต่างกันคือ จากขวาไปซ้าย (ขวา), จากซ้ายไปขวา (ซ้าย) หรือไม่เกี่ยวข้อง (n/a)
ตาราง 1.2.6 แสดงลำดับความสำคัญจากมากไปน้อย ในระดับเดียวกันลำดับความสำคัญจากซ้ายไปขวา
ตาราง 1.2.6 ลำดับความสำคัญของ operator
วิธีการประเมิน |
Operator |
n/a |
new |
ขวา |
[ (สำหรับ array) |
ขวา |
! ~ ++ -- @ (int) (float) (string) (array) (object) |
ซ้าย |
* / % |
ซ้าย |
+ - . |
ซ้าย |
<< >> |
n/a |
< <= = > >= |
n/a |
== != <> === !== |
ซ้าย |
& |
ซ้าย |
^ |
ซ้าย |
| |
ซ้าย |
&& |
ซ้าย |
|| |
ซ้าย |
?: |
ขวา |
= += -= *= /= .= %= &= |= ^= <<= >>= |
ขวา |
Print |
ซ้าย |
And |
ซ้าย |
Xor |
ซ้าย |
Or |
ซ้าย |
, |
ตัวอย่าง จากตารางบอกว่า
$a || $b + $c * $d and $e
เทียบเท่ากับ
$a || (($b + ($c * $d)) and $e))
|