So sánh điều kiện trong php năm 2024

Một câu lệnh else của PHP có thể theo sau khối if. Nếu điều kiện của if không đánh giá là TRUE, khối mã sau else sẽ được thực thi.

$condition = FALSE;  
if ($condition) {  
  // Không được thực thi  
} else {  
  // Sẽ thực thi  
}

1.2. Câu lệnh elseif của PHP

Các câu lệnh elseif trong PHP phải được ghép nối với một câu lệnh if, nhưng nhiều câu lệnh elseif khác có thể được xâu chuỗi từ một câu lệnh if duy nhất.

elseif cung cấp một điều kiện bổ sung để kiểm tra (và mã tương ứng để thực thi) nếu các câu lệnh điều kiện của khối if và bất kỳ elseif nào trước đó không được đáp ứng.

$fav_fruit = "orange";
if ($fav_fruit === "banana") {  
  echo "Enjoy the banana!";  
} elseif ($fav_fruit === "apple"){  
  echo "Enjoy the apple!";  
} elseif ($fav_fruit === "orange"){  
  echo "Enjoy the orange!";  
} else {  
  echo "Enjoy the fruit!";  
}  
// Output: Enjoy the orange!

1.3. Toán tử ba ngôi PHP

Trong PHP, toán tử ba ngôi cho phép cú pháp nhỏ gọn trong trường hợp quyết định nhị phân (if/else). Nó đánh giá một điều kiện duy nhất và thực thi một biểu thức và trả về giá trị của nó nếu điều kiện được đáp ứng và biểu thức thứ hai nếu ngược lại.

Cú pháp của toán tử bậc ba trông như sau: điều_kiện ? biểu_thức_1 : biểu_thức_2

// Thông thường  
$isClicked = FALSE;  
if ($isClicked) {  
  $link_color = "purple";  
} else {  
  $link_color = "blue";  
}  
// $link_color = "blue";
// Ba ngôi  
$isClicked = FALSE;  
$link_color = $isClicked ? "purple" : "blue";  
//  $link_color = "blue";

1.4. Câu lệnh switch PHP

Các câu lệnh switch PHP cung cấp một cú pháp rõ ràng cho một loạt các so sánh trong đó một giá trị hoặc biểu thức được so sánh với nhiều kết quả khớp có thể có và các khối mã được thực thi dựa trên case khớp đó.

Trong PHP, khi gặp một trường hợp khớp, các khối mã của tất cả các case tiếp theo (bất kể khớp) sẽ được thực thi cho đến khi đạt được return, break hoặc kết thúc câu lệnh. Điều này được gọi là rơi qua.

switch ($letter_grade) {  
  case "A":  
    echo "Terrific";  
    break;  
  case "B":  
    echo "Good";  
    break;  
  case "C":  
    echo "Fair";  
    break;  
  case "D":  
    echo "Needs Improvement";  
    break;  
  case "F":  
    echo "See me!";  
    break;  
  default:  
    echo "Invalid grade";  
}

1.5. TRUE và FALSE trong PHP

Các giá trị PHP trong một điều kiện sẽ luôn được đánh giá là TRUE hoặc FALSE. Các giá trị sẽ đánh giá là TRUE được gọi là giá trị đúng và các giá trị đánh giá là FALSE được gọi là sai.

Cách đây 4 tháng, mình đã từng có một bài viết mang tên "Variables Comparison in Javascript", bài viết phân tích về tính

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

0 và

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

1 trong Javascript, cũng như những cạm bẫy thường gặp khi thực hiện các phép so sánh thông thường.

Lần này mình tiếp tục thực hiện chủ đề tương tự, nhưng với một ngôn ngữ khác: PHP, ngôn ngữ lập trình web phổ biến nhất thế giới hiện nay.

Bạn có thể code PHP, có thể sử dụng Framework này, Framework kia, nhưng liệu bạn đã thực sự hiểu hết về meta của nó, bạn có thực sự nắm rõ được tính

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

0 và

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

1, hay những phép so sánh của PHP.

Do you really know PHP ?

Can you solve the following quizes ?

Tương tự với bài viết "Variables Comparison in Javascript" trước đây, mình sẽ lại mở đầu bài viết về PHP lần này bằng một số "câu đố" nho nhỏ. Câu hỏi rất đơn giản thôi, Các phép toán dưới đây trả về

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

4 hay

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

5

Chú ý: Phiên bản PHP được sử dụng là phiên bản mới nhất ở thời điểm hiện tại, tháng 9/2015, tức PHP 5.6 nhé

false == false // It will return true. Too easy, right ? :D
// But how about the following ? TRUE or FALSE ?
// Các phép so sánh sau trả về true hay false
1 == "1"
0 == "0"
"0" == "-0"
0 == false
"0" == false
"-0" == false
"0.0" == false
10 == "10tran duc thang 10"
"thang" == 0
"thang" == "0"
[] == false
null == []
null == ""
null == 0
null < -1
[] == 0
[] == ""
1 == "1 "
"1" == "1 "
"10" == "                    10"
"100" == "1e2"
"1000"  == "0x3e8"
"345" == "0345"
345 == 0345
"345" < "0346"
[1] == 1
(int) [1] == 1
(int) [0] == 0
false < -INF
false < NAN
true < INF
[1] == [1]
[1, 2] == [1 => 2, 0 => 1]
[1, 2] === [1 => 2, 0 => 1]
[1, 2] > 3
[1, 2] > "[1, 2]"
[1, 2] > [3]
[1, 2] > [2, 1]
(object) [1] > [1]

Nếu bạn có thể trả lời đúng hết, và hiểu được bản chất tại sao nó lại như vậy thì có lẽ bạn cũng đã nắm rõ hết được những gì mà bài viết này đề sẽ cập đến rồi. Còn ngược lại, hãy dành chút thời gian để đọc và tìm hiểu về những điều sẽ được giới thiệu dưới đây, bạn sẽ tự tìm được lời giải thích cho từng đáp án.

Let's start!

Variable Types

Để trả lời được những câu hỏi trên thì trước hết ta cần phải tìm hiểu và nắm rõ được về những kiểu giá trị có trong PHP.

Các kiểu giá trị trong PHP

  • String
  • Integer (Hay Long)
  • Float (Hay double)
  • Boolean
  • Array
  • Object
  • NULL
  • Resource

Một số điều cần lưu ý

  • Kiểu Boolean gồm 2 giá trị là

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4 và

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    5.
  • Kiểu Null chỉ gồm duy nhất một giá trị là

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    8.

Cũng giống như Javascript hay nhiều ngôn ngữ lập trình khác, để so sánh "bằng" trong PHP, ta có thể dùng

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

9 và

null == ""; // true
null == "0"; // false

0.

null == ""; // true
null == "0"; // false

0, Strict Comparison hay Strict Equal, sẽ so sánh cả kiểu giá trị của 2 bên. Nếu 2 bên có kiểu giá trị khác nhau thì phép toán sẽ trả về giá trị

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

5. Phép toán

null == ""; // true
null == "0"; // false

0 là rất minh bạch và dễ sử dụng, ít gây hiểu nhầm hay khó khăn gì cho lập trình viên.

Còn phép so sánh

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

9, Loose Comparison hay Loose Equal, thì sẽ tìm cách đưa 2 bên về cùng một kiểu giá trị rồi thực hiện phép so sánh.

Ta có thể dùng phép ép kiểu giống với C để đưa một biến từ kiểu giá trị này thành kiểu giá trị khác:

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

Những giá trị được coi là

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

5

Đó là những giá trị khi được ép về kiểu Boolean sẽ cho giá trị là

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

5. Bao gồm:

  • 0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    5
  • null == ""; // true null == "0"; // false

    8
  • null == ""; // true null == "0"; // false

    9
  • NAN == true; // true null < NAN; // true "0" < true; // true

    0 (Xâu rỗng)
  • NAN == true; // true null < NAN; // true "0" < true; // true

    1
  • NAN == true; // true null < NAN; // true "0" < true; // true

    2 (Mảng không có phần tử)
  • 0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    8 (Gồm cả những biến không được set giá trị)
  • NAN == true; // true null < NAN; // true "0" < true; // true

    4 được tạo từ tag rỗng

Ví dụ

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

Ngoài những giá trị là

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

5 kể trên, thì tất cả các giá trị khác đều được coi là

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

4.

So sánh trong PHP

Trong phần này, chúng ta sẽ tìm hiểu về một số trường hợp, hay quy tắc đặc biệt khi thực hiện các phép so sánh

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

9 hay

NAN == true; // true
null < NAN; // true
"0" < true; // true

8,

NAN == true; // true
null < NAN; // true
"0" < true; // true

9 trong PHP. Một số trong đó có thể gây bất ngờ cho bạn đấy.

So sánh điều kiện trong php năm 2024

Null vs String

  • 0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    8 được convert về xâu rỗng.

null == ""; // true
null == "0"; // false

Boolean & Null

  • Các biến khi so sánh với

    "100" == "10e1"; // true "16" == "0x10"; // true

    1 hay

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    8 thì sẽ được ép về kiểu

    "100" == "10e1"; // true "16" == "0x10"; // true

    1. Và khi so sánh 2 giá trị kiểu

    "100" == "10e1"; // true "16" == "0x10"; // true

    1 với nhau thì

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    5 <

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4.

NAN == true; // true
null < NAN; // true
"0" < true; // true

String vs String

  • Phép so sánh String với String sử dụng

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9 trông qua thì có vẻ đơn giản, bởi 2 bên đã cùng một loại rồi, ta chỉ cần xem giá trị của nó có giống nhau hay không mà thôi. Thế nhưng mọi thứ lại không hẳn như vậy, đôi khi so sánh 2 String thì chúng lại bị ép về kiểu ... Integer hay Float =)). Chẳng hạn như phép so sánh

    "100" == "10e1"; // true "16" == "0x10"; // true

    8 trả về ...

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4, mặc dù 2 chuỗi đó là khác nhau (wtf, (facepalm)).
  • Thậm chí một String có chữ

    "1" == " 1"; // true "2" == " \t\n 2"; // true " 3" == "\t 3"; // true

    0 hay

    "1" == " 1"; // true "2" == " \t\n 2"; // true " 3" == "\t 3"; // true

    1 cũng có thể bị ép về kiểu số nếu có thể (facepalm)

"100" == "10e1"; // true
"16"  == "0x10"; // true

  • Hơn thế nữa, nếu trong một chuỗi là một số và có space hay tab ở đằng trước, thì chúng sẽ bị loại bỏ.

"1" == " 1"; // true
"2"  == " \t\n 2"; // true
"   3" == "\t 3"; // true

  • Tuy nhiên, nếu có space, tab ..., hay bất kỳ ký tự nào ở đằng sau thì chúng sẽ không bị ép về giá trị number để so sánh nữa :v

"1" == "1 "; // false
"2" == "2a"; // false
"3 " == "3  "; // false

  • Phép so sánh String với String sử dụng

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9 thật sự rất nguy hiểm và đem lại nhiều kết quả không mong muốn, thế nên đừng sử dụng nó khi mà bạn không biết chắc là mình đang làm gì nhé =))

Number vs String

  • String sẽ được ép về giá trị number (Integer hoặc Float)
  • Nếu một string bắt đầu bằng một số thì nó sẽ có giá trị là số đó.
  • Nếu một string không bắt đầu bằng một số thì nó sẽ có giá trị là

    null == ""; // true null == "0"; // false

    8.

0 == "thang"; // true
345 == "345 thang"; // true
100 == "10e1thang"; // true

Array vs Array

  • Hai array là "bằng nhau" theo phép so sánh

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9 nếu chúng có các cặp key và value là "bằng nhau". Việc so sánh key, value cũng được thực hiện bằng phép so sánh

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9. Thứ tự của các cặp key, value trong array không gây ra ảnh hưởng gì.

$array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0];
$array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3'];
$array1 == $array2; // true
$array1 === $array2; // false

  • Hai array là "bằng nhau" theo phép so sánh

    null == ""; // true null == "0"; // false

    0 nếu chúng có các cặp key và value là "bằng nhau". Việc so sánh key, value cũng được thực hiện bằng phép so sánh

    null == ""; // true null == "0"; // false

    0. Thứ tự của các cặp key, value trong array khác nhau sẽ khiến các array được coi là khác nhau.

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

0

  • Khi so sánh 2 array bằng phép toán

    NAN == true; // true null < NAN; // true "0" < true; // true

    9 hay

    NAN == true; // true null < NAN; // true "0" < true; // true

    8, thì array nào có nhiều phần tử hơn thì sẽ lớn hơn. Nếu 2 array cùng số phần tử, và các key giống nhau thì sẽ so sánh lần lượt các phần tử với nhau. (Nếu các key khác nhau thì sẽ không so sánh được, phép toán sẽ trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    5)

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

1

Object vs Object

  • Các instance của các Class khác nhau thì không so sánh được.
  • Các object "bằng nhau" theo phép toán

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9 nếu chúng là instances của cùng một Class, và có cùng các attributes và giá trị các attributes cũng "bằng nhau";
  • Các object "bằng nhau" theo phép toán

    null == ""; // true null == "0"; // false

    0 nếu và chỉ nếu chúng cùng trỏ đến một instance.

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

2

Other

  • Một array sẽ lớn hơn (

    NAN == true; // true null < NAN; // true "0" < true; // true

  • mọi giá trị khác mà không phải là boolean, array hay object. Tức phép toán so sánh

    NAN == true; // true null < NAN; // true "0" < true; // true

    9 giữa array và vế kia là integer, float, string, null ... thì đều trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4, trừ việc

    "1" == "1 "; // false "2" == "2a"; // false "3 " == "3 "; // false

    6 trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4, và do đó

    "1" == "1 "; // false "2" == "2a"; // false "3 " == "3 "; // false

    8 trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    5.
  • Array có thể ép về kiểu number, trong đó array rỗng thì cho giá trị

    null == ""; // true null == "0"; // false

    8, ngoài ra cho giá trị

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    1.
  • Một object sẽ lớn hơn (

    NAN == true; // true null < NAN; // true "0" < true; // true

  • một array.

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

3

Fun fact

  • Phép toán

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9 trong PHP không có tính phản thân (reflexive), tức

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    4 không phải lúc nào cũng đúng =)). Ví dụ

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    5 sẽ trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    5
  • Phép toán

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9 trong PHP có tính đối xứng (symmetric), tức

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    8 và

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    9 sẽ trả về cùng một kết quả.
  • Phép toán

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    9 trong PHP không có tính chất bắc cầu (transitive), tức

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    8 và

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    2 trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4 nhưng

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    4 chưa chắc đã trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4. Ví dụ

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

4

  • Phép toán

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    6 (hay

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

  • trong PHP không có tính phản xứng (anti-symmetric), tức

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    8 và

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    9 đều trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4 nhưng chưa chắc

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    8 đã trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    4.

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

5

  • Phép toán

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    6, hay

    NAN == true; // true null < NAN; // true "0" < true; // true

    8 đều không có tính chất bắc cầu (transitive)
  • Phép toán

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    6, hay

    NAN == true; // true null < NAN; // true "0" < true; // true

    8 đều không có tính toàn bộ (total), tức cả

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    8 và

    $array1 = ['3' => 3, '2' => 2, '1' => 1, '0' => 0]; $array2 = [false => '0', 1 => '1', 2 => '2', 3 => '3']; $array1 == $array2; // true $array1 === $array2; // false

    9 đều có thể trả về

    0.0 == false; // true "0" == false; // true $a = new SimpleXML('

    '); $a == false; // true

    5, hay cả

    (boolean) 1 // true (string) 10 // "10" (int) "100" // 100 (int)[1] // 1

    10,

    (boolean) 1 // true (string) 10 // "10" (int) "100" // 100 (int)[1] // 1

    11 và

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    8 cũng thế.

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

6

  • Trong version 7, PHP có giới thiệu một phép toán mới, đó là

    (boolean) 1 // true (string) 10 // "10" (int) "100" // 100 (int)[1] // 1

    13. Phép so sánh

    (boolean) 1 // true (string) 10 // "10" (int) "100" // 100 (int)[1] // 1

    14 sẽ trả về -1 nếu

    (boolean) 1 // true (string) 10 // "10" (int) "100" // 100 (int)[1] // 1

    10, trả về 0 nếu

    0 == "thang"; // true 345 == "345 thang"; // true 100 == "10e1thang"; // true

    8 và trả về 1 nếu

    (boolean) 1 // true (string) 10 // "10" (int) "100" // 100 (int)[1] // 1

    17.
  • Chắc hẳn bạn đã từng sử dụng Ternary Operation, toán tử 3 ngôi:

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

7

Phép toán

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

18 có thể được viết ngắn lại thành

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

19

  • Cũng liên quan đến Ternary Operation, theo bạn phép toán sau trả về kết quả gì ?

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

8

Mới nhìn qua, có thể bạn sẽ trả lời kết quả là

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

5, với thứ tự thực hiện phép toán là

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

21, tuy nhiên thứ tự đúng sẽ phải là

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

22, và do đó, phép toán sẽ trả về

0.0 == false; // true
"0" == false; // true
$a = new SimpleXML('
'); $a == false; // true

4.

The Answers

Dưới đây là đáp án cho những câu hỏi được đưa ra ở đầu bài viết.

Nếu bạn đã đọc hết phần phía trên rồi thì chắc có thể hiểu được tại sao nó lại ra được đáp án như dưới đây. Còn nếu có câu nào mà bạn vẫn chưa hiểu được nguyên nhân thì điều đó có nghĩa là bạn đã bỏ sót điều gì đó rồi đấy, kéo lên đọc lại thôi (honho)

Nếu có thắc mắc gì hãy để lại tin nhắn ở phần comment nhé.

(boolean) 1 // true
(string) 10 // "10"
(int) "100" // 100
(int)[1] // 1

9


Bài viết chắc vẫn chưa thể cover hết được những vấn đề trong các phép toán so sánh trong PHP. Ngoài ra nhiều chỗ mình cũng viết dựa trên kinh nghiệm và những gì mình biết. Có thể còn có nhiều chỗ thiếu sót, hy vọng nhận được ý kiến đóng góp của các bạn