ภาษาพีเอชพี/ตัวดำเนินการ
Operators
แก้ไขตัวดำเนินการมีอยู่หลายประเภท โดยหลักจะแบ่งโดย จำนวนส่วนประกอบ มี 3 ประเภท คือ
- unary operator (ประกอบด้วยหนึ่งส่วน เช่น ++ -- !)
- binary operator (ประกอบด้วยสองส่วน เช่น + - * / =)
- ternary operator (ประกอบด้วยสามส่วน เช่น ?:)
และยังมีการแบ่งชนิดตามหน้าที่การทำงานด้วย
ระดับความสำคัญ
แก้ไขOperator แต่ละตัวมีความสำคัญต่างกัน ตัวไหนมีความสำคัญมากกว่าจะถูกใช้ก่อน
- โดยถ้า operator ที่มีความสำคัญเท่ากัน ก็จะขึ้นอยู่กับ รูปแบบการประเมิน ว่ามีทิศทางไปทางไหน
การประเมิน | Operator |
ไม่มี | clone new |
ซ้ายไปขวา | [ |
ไม่มี | ++ -- |
ไม่มี | ~ - (int) (float) (string) (array) (object) (bool) @ |
ไม่มี | instanceof |
ขวาไปซ้าย | ! |
ซ้ายไปขวา | * / % |
ซ้ายไปขวา | + - . |
ซ้ายไปขวา | << >> |
ไม่มี | < <= > >= <> |
ไม่มี | == != === !== |
ซ้ายไปขวา | & |
ซ้ายไปขวา | ^ |
ซ้ายไปขวา | | |
ซ้ายไปขวา | && |
ซ้ายไปขวา | || |
ซ้ายไปขวา | ? : |
ขวาไปซ้าย | = ^= <<= >>= |
ซ้ายไปขวา | and |
ซ้ายไปขวา | xor |
ซ้ายไปขวา | or |
ซ้ายไปขวา | , |
ตัวอย่างของรูปแบบการประเมิน
<?php
$a = 10 * 3 / 6; // จะเท่ากับ (10*3) / 6
$a = 1;
$b = 2;
$a = $b += 2; // $a = ($b += 2) --> $a = 4, $b = 4
?>
Arithmetic Operators
แก้ไขArithmetic Operators หรือ ตัวดำเนินการทางคณิตศาสตร์ ลักษณะการใช้งานก็คล้ายกับรูปแบบคณิตศาสตร์ทั่วไป
Operator | ตัวอย่าง | ผลลัพธ์ |
+ (บวก) | $a + $b | ผลรวมของ $a และ $b |
- (ลบ) | $a - $b | ผลต่างของ $a และ $b |
* (คูณ) | $a * $b | ผลคูณของ $a และ $b |
/ (หาร) | $a / $b | ผลหารของ $a และ $b |
% (หารเอาเศษ) | $a % $b | เศษ จากการหารของ $a และ $b |
- | -$a | กลับค่า $a |
Assignment Operators
แก้ไขAssignment Operators หรือ ตัวดำเนินการกำหนดค่า คือ operator ที่ใช้ในการกำหนดค่า
Operator | ตัวอย่าง | ผลลัพธ์ |
= | $a = $b | กำหนดค่า $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 .= $b | $a = $a . $b (String Operator) |
&= | $a &= $b | $a = $a & $b (Bitwise Operator) |
|= | $a |= $b | $a = $a | $b (Bitwise Operator) |
^= | $a ^= $b | $a = $a ^ $b (Bitwise Operator) |
<<= | $a <<= $b | $a = $a << $b (Bitwise Operator) |
>>= | $a >>= $b | $a = $a >> $b (Bitwise Operator) |
<?php
$a = 3;
$b = 2;
$a += $b;
echo $a; // Output: 5
?>
Bitwise Operators
แก้ไขBitwise Operators หรือ ตัวดำเนินการทางบิท คือ operator ที่เกี่ยวข้องกับข้อมูลในระดับ bit
- โดย bit ที่มีค่าเป็น 0 เรียกว่า clear มีค่าเป็น 1 เรียกว่า set
Operator | ตัวอย่าง | ผลลัพธ์ |
&(and) | $a & $b | bit set ถ้า bit ของทั้ง $a และ $b set |
|(or) | $a | $b | bit set ถ้า bit ของ $a หรือ $b set |
^(xor) | $a ^ $b | bit set ถ้า bit ของ $a หรือ $b set แต่ถ้า set ทั้งคู่จะเป็น clear |
~(not) | ~ $a | ถ้า bit นั้น set จะเป็น clear กลับกันถ้าเป็น clear จะเป็น set |
<< | $a << $b | เลื่อน(shift) บิทของ $a ไปทางซ้ายจำนวน $b ครั้ง |
>> | $a >> $b | เลื่อน(shift) บิทของ $a ไปทางขวาจำนวน $b ครั้ง |
ตัวอย่างของการ and, or, xor แบบ bitwise
Bitwise AND ( 0 = 0000) & ( 5 = 0101) = ( 0 = 0000) ( 1 = 0001) & ( 5 = 0101) = ( 1 = 0001) ( 2 = 0010) & ( 5 = 0101) = ( 0 = 0000) ( 4 = 0100) & ( 5 = 0101) = ( 4 = 0100) ( 8 = 1000) & ( 5 = 0101) = ( 0 = 0000) Bitwise Inclusive OR ( 0 = 0000) | ( 5 = 0101) = ( 5 = 0101) ( 1 = 0001) | ( 5 = 0101) = ( 5 = 0101) ( 2 = 0010) | ( 5 = 0101) = ( 7 = 0111) ( 4 = 0100) | ( 5 = 0101) = ( 5 = 0101) ( 8 = 1000) | ( 5 = 0101) = (13 = 1101) Bitwise Exclusive OR (XOR) ( 0 = 0000) ^ ( 5 = 0101) = ( 5 = 0101) ( 1 = 0001) ^ ( 5 = 0101) = ( 4 = 0100) ( 2 = 0010) ^ ( 5 = 0101) = ( 7 = 0111) ( 4 = 0100) ^ ( 5 = 0101) = ( 1 = 0001) ( 8 = 1000) ^ ( 5 = 0101) = (13 = 1101)
ตัวอย่างการใช้งานใน PHP
<?php
echo 4 ^ 5; // Output: 1
echo 4 | 5; // Output: 5
echo 4 & 5; // Output: 4
?>
ตาราง AND
|
ตาราง OR
|
ตาราง XOR
|
ตัวอย่างข้างล่างจะเป็นอธิบาย การ shift bit ทั้งซ้ายและขวา
--- Shift bit ของ จำนวนเต็มบวก ไปทางขวา --- 4 >> 1 = 2 Binary: ค่าเริ่มต้น=0000 0100 ผลลัพธ์=0000 0010 4 >> 2 = 1 Binary: ค่าเริ่มต้น=0000 0100 ผลลัพธ์=0000 0001 4 >> 3 = 0 Binary: ค่าเริ่มต้น=0000 0100 ผลลัพธ์=0000 0000 --- Shift bit ของ จำนวนเต็มบวก ไปทางซ้าย --- 4 << 1 = 8 Binary: ค่าเริ่มต้น=0000 0100 ผลลัพธ์=0000 1000 4 << 2 = 16 Binary: ค่าเริ่มต้น=0000 0100 ผลลัพธ์=0001 0000 4 << 3 = 0 Binary: ค่าเริ่มต้น=0000 0100 ผลลัพธ์=0010 0000 4 << 6 = -128 Binary: ค่าเริ่มต้น=0000 0100 ผลลัพธ์=1000 0000 **เนื่องจากเลื่อนบิทไปเปลี่ยนค่าของ sign-bit ซึ่งเป็นตัวบอกเครื่องหมายของจำนวนเต็ม
--- Shift bit ของ จำนวนเต็มลบ ไปทางขวา --- -4 >> 1 = -2 Binary: ค่าเริ่มต้น=1111 1100 ผลลัพธ์=1111 1110 **เป็น 1 เพราะเอา sign-bit มาเติม bit -4 >> 2 = -1 Binary: ค่าเริ่มต้น=1111 1100 ผลลัพธ์=1111 1111 -4 >> 3 = -1 Binary: ค่าเริ่มต้น=1111 1100 ผลลัพธ์=1111 1111 --- Shift bit ของ จำนวนเต็มลบ ไปทางขวา --- -4 << 1 = -8 Binary: ค่าเริ่มต้น=1111 1100 ผลลัพธ์=1111 1000 -4 << 2 = -16 Binary: ค่าเริ่มต้น=1111 1100 ผลลัพธ์=1111 0000 -4 << 3 = -32 Binary: ค่าเริ่มต้น=1111 1100 ผลลัพธ์=1110 0000 -4 << 6 = 0 Binary: ค่าเริ่มต้น=1111 1100 ผลลัพธ์=0000 0000 **sign-bit หลุดออกไปด้วย
Comparison Operators
แก้ไขComparison Operators หรือ ตัวดำเนินการเปรียบเทียบ เป็น operator ที่ใช้เปรียบเทียบค่า 2 ค่า
Operator | ตัวอย่าง | ผลลัพธ์ |
== | $a == $b | TRUE ถ้า $a เท่ากับ $b |
=== | $a === $b | TRUE ถ้า $a เท่ากับ $b และเป็น ชนิด เดียวกัน |
!= | $a != $b | TRUE ถ้า $a ไม่เท่ากับ $b |
<> | $a <> $b | TRUE ถ้า $a ไม่เท่ากับ $b |
!== | $a !== $b | TRUE ถ้า $a ไม่เท่ากับ $b และเป็นคนละ ชนิด กัน |
< | $a < $b | TRUE ถ้า $a น้อยกว่า $b |
> | $a > $b | TRUE ถ้า $a มากกว่า $b |
<= | $a <= $b | TRUE ถ้า $a น้อยกว่าหรือเท่ากับ $b |
>= | $a >= $b | TRUE ถ้า $a มากกว่าหรือเท่ากับ $b |
อาจจะใช้ร่วมกับ Logical Operator ด้วย
<?php
$a = 1;
$b = 2
$c = false;
if( ($a == $b) && $c )
{ echo "TRUE"; }
else
{ echo "FALSE"; }
// Output: FALSE
// เพราะว่า $c เป็น false
?>
และยังมี ternary operator อีกตัวคือ (? :) รูปแบบการใช้งานคือ
- (expr1) ? (expr2) : (expr3) คือถ้า expr1 มีค่า TRUE จะเลือกใช้ expr2 แต่ถ้า expr1 เป็น FALSE จะเลือก expr3
<?php
$a = false;
$b = ($a) ? "foo" : "bar";
echo $b; // Output: bar
// ซับซ้อนมากขึ้น
$c = ($b == "foo") ? 1 : ($b == "world") ? 2 : ($b == "bar") ? 3 : 0; // $c : 3
echo $c; // Output: 3
?>
จะพบว่ามีลักษณะเหมือน if-statement นั้นเอง
Error Control Operators
แก้ไขError Control Operators
Execution Operators
แก้ไขExecution Operators
Incrementing และ Decrementing Operators
แก้ไขIncrementing/Decrementing Operators หรือ ตัวดำเนินการเพิ่มลด มี 4 ตัว 2 รูปแบบคือ ไว้ข้างหน้ากับไว้ข้างหลัง ซึ่งผลลัพธ์ที่ได้ต่างกัน
Operator | ตัวอย่าง | ผลลัพธ์ |
++ | ++$a | เพิ่มค่าของ $a แล้วค่อยคืนค่า $a |
-- | --$a | ลดค่าของ $a แล้วค่อยคืนค่า $a |
++ | $a++ | คืนค่า $a ก่อนแล้วค่อยเพิ่มค่า $a |
-- | $a-- | คืนค่า $a ก่อนแล้วค่อยลดค่า $a |
<?php
$a = 1;
echo $a++; // Output: 1
echo $a; // Output: 2
echo ++$a; // Output: 3
$b = --$a; // $b : 2, $a: 2
$c = $a--; // $c : 2, $a: 1
?>
Logical Operators
แก้ไขLogical Operators หรือ ตัวดำเนินการทางตรรกะ
Operator | ตัวอย่าง | ผลลัพธ์ |
and | $a and $b | TRUE ถ้า $a และ $b มีเท่ากับ TRUE |
or | $a or $b | TRUE ถ้า $a หรือ $b มีค่าเท่ากับ TRUE |
xor | $a xor $b | TRUE ถ้า $a หรือ $b มีค่าเท่ากับ TRUE แต่ถ้าเป็น TRUE ทั้งคู่ค่าจะได้ FALSE |
! | ! $a | TRUE ถ้า $a มีค่าไม่เท่ากับ TRUE |
&& | $a && $b | TRUE ถ้า $a และ $b มีเท่ากับ TRUE |
|| | $a || $b | TRUE ถ้า $a หรือ $b มีค่าเท่ากับ TRUE |
ตัวอย่าง
<?php
$a = (true || false || false); // $a = true; --> $a = ((true || false) || false );
$a = (true || true && false); // $a = false --> $a = ( true || (true && false));
$a = true;
!$a; // $a : false
!$a; // $a : true
//credit: momrom@freenet.de ที่ยกตัวอย่างเพิ่มความกระจ่างใน manual online
// "||" มีระดับความสำคัญสูงกว่า "=" ซึ่งมีระดับความสำคัญสูงกว่า "or"
$e = false || true; // $e จะกำหนดค่าเป็น (false || true) ซึ่งก็จะเป็น true
$f = false or true; // $f จะกำหนดค่าเป็น false เพราะว่า "=" มีระดับสำคัญสูงกว่า "or"
var_dump($e, $f);
// "&&" มีระดับความสำคัญสูงกว่า "=" ซึ่งมีระดับความสำคัญสูงกว่า "and"
$g = true && false; // $g จะกำหนดค่าเป็น (true && false) ซึ่งจะเป็น false
$h = true and false; // $h จะกำหนดค่าเป็น true เพราะว่า "=" มีระดับสำคัญสูงกว่า "and"
var_dump($g, $h);
?>
สำหรับคนที่งงในเรื่อง or and xor ตารางนี้จะช่วยอธิบายได้ดีขึ้น
ตาราง AND
|
ตาราง OR
|
ตาราง XOR
|
String Operators
แก้ไขString Operators มีอยู่ 2 ตัวคือ
- .
- .=
ซึ่งทำหน้าที่ในการเชื่อม string 2 ตัวเข้าด้วยกัน
<?php
$a = "Foo";
$b = "Bar";
$c = $a . $b; // $c : "FooBar"
$c .= "World"; // มีค่าเท่ากับ $c = $c . "World";
echo $c; // Output: FooBarWorld
?>
Array Operators
แก้ไขArray Operators
Operator | ตัวอย่าง | ผลลัพธ์ |
+ | $a + $b | ยูเนี่ยน $a และ $b |
== | $a == $b | TRUE ถ้า $a และ $b มีค่า key/value ทุกคู่เท่ากัน |
=== | $a === $b | TRUE ถ้า $a และ $b มีค่า key/value ทุกคู่เท่ากัน และ เรียงเหมือนกัน ชนิดเดียวกัน |
!= | $a != $b | TRUE ถ้า $a และ $b ไม่เท่ากัน |
<> | $a <> $b | TRUE ถ้า $a และ $b ไม่เท่ากัน |
!== | $a !== $b | TRUE ถ้า $a และ $b ไม่เท่ากัน เรียงไม่เหมือนกัน คนละชนิดกัน |
โดย operator + (ยูเนี่ยน) จะเอา element ของ arrayด้านขวามือ ไปเพิ่มใส่ arrayด้านซ้ายมือ ถ้าหากว่า key ซ้ำกันก็จะ ไม่เกิดการเขียนทับ
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>
Output:
Union of $a and $b: array(3) { ["a"]=> string(5) "apple" ["b"]=> string(6) "banana" ["c"]=> string(6) "cherry" } Union of $b and $a: array(3) { ["a"]=> string(4) "pear" ["b"]=> string(10) "strawberry" ["c"]=> string(6) "cherry" }
การเทียบ element 1 คู่นั้น จะถือว่าเท่ากันได้ก็ต่อเมื่อ key และ value นั้นเท่ากัน
<?php
$a = array("apple", "banana");
$b = array(1 => "banana", 0 => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false) - เนื่องจากเรียงต่างกัน
?>
Type Operators
แก้ไขType Operators
สารบัญ
แก้ไข- รูปแบบคำสั่งพื้นฐาน (Basic Syntax)
- ประเภทของตัวแปร (Types)
- ตัวแปร (Variables)
- ค่าคงที่ (Constants)
- นิพจน์ (Expression)
- ตัวดำเนินการ (Operators)
- โครงสร้างควบคุม (Control Structure)