Chương 6: Điều kiện 

Chương 6 : Điều kiện

Dùng điều kiện để mần chi ?
Thỉnh thoảng mình cũng cần phải in ra những thứ khác nhau tùy theo một điều kiện nào đó, chẳng hạn nếu buổi sáng thì mình in ra câu « Chào buổi sáng ! » còn nếu buổi tối thì in ra « Chào buổi tối ! » ...
Cũng từ đó mà nảy sinh ra cái vụ dùng điều kiện để ra lệnh cho PHP tùy trường hợp cụ thể. Ở ví dụ của chúng ta, chúng ta sẽ bảo PHP « nếu là buổi sáng thì chú nói « Chào buổi sáng », nếu tối thì chú « Chào buổi tối ! » nghe ! » Rồi bạn sẽ thấy điều kiện thực sự là cơ sở để tạo một trang web động, để xử lý tình huống tùy theo ngày, giờ, thành viên, …

precedent chapter Mục Lục next chapter

Cấu trúc cơ bản : If … else

Mình gọi đó là một cấu trúc bởi nó có một “dạng” hơi đặc biệt!
Để nghiên cứu cấu trúc if…else, chúng ta hãy theo trình tự sau đây:
  • Vài kí hiệu cần biết: Trước hết là cần phải nắm vài kí hiệu dùng trong so sánh. Phải ghi nhớ kĩ bởi chúng ta sẽ dùng nhiều khi sử dụng điều kiện
  • Cấu trúc if…else: cái này hơi bự đa, ở đây mình sẽ xem cơ chế hoạt động của cấu trúc if…else như thế nào. Tôi khỏi nói các bạn cũng tự hiểu là không thể lơ là ở phần này.
  • Nhiều điều kiện cùng lúc
  • Trường hợp Boolean: cũng có lúc mình làm việc với những điều kiện dạng “nếu đúng thì… nếu sai thì…”; đó gọi là dùng các biến Boolean (biến có giá trị hoặc true hoặc false)
  • Mẹo vặt

Vài kí hiệu cần biết:

Kí hiệu Ý nghĩa
== bằng với
< nhỏ hơn
> lớn hơn
<= nhỏ hơn hoặc bằng
>= lớn hơn hoặc bằng
!= khác

Chú ý: đừng nhầm lẫn giữa kí hiệu hai dấu bằng == (bằng) và = (gán), trong điều kiện, mình luôn dùng kí hiệu bằng (==) chứ không dùng kí hiệu gán (=).
Cấu trúc if … else

Sau đây là thứ tự cần tuân theo khi dùng cấu trúc if…else
  • Để bắt đầu sử dụng điều kiện, mình ghi “if”
  • Tiếp đó, mình thêm điều kiện cần dùng vào trong dấu ngoặc đơn ngay sau if
  • Cuối cùng, mình đặt nội dung cần thực hiện nếu điều kiện đúng vào giữa hai dấu ngoặc móc ({})
Và một ví dụ bao giờ cũng dễ hiểu hơn một tràng chữ nghĩa:
Code : PHP
<?php
if ($age <= 12)
{
echo "chào nhóc con !";
}
?>
Ở đây,mình đã bảo PHP “nếu biến $age mà nhỏ hơn hoặc bằng 12 thì hãy in ra câu “chào nhóc con” nhé!”
Để ý rằng trong hầu như tất cả trường hợp, mình đều dùng một biến để áp đặt cho nó một điều kiện nào đó!
Ở ví dụ của mình, mình làm việc trên biến $age. Có hai khả năng của $age: nếu $age nhỏ hơn hoặc bằng 12 thì in ra cái gì đó, nếu không thì nhảy ra khỏi hai dấu ngoặc móc, không làm gì cả!
Bây giờ hãy cải thiện ví dụ của mình chút xíu nhé, hãy thử in ra thứ gì khác nếu $age lớn hơn 12 xem nào!

Code : PHP
<?php
$age = 8;

if ($age <= 12) // NẾU tuổi nhỏ hơn hoặc bằng 12
{
echo "Chào nhóc con ! Chào mừng đến trang web của chú !<br>";
$autorisation_enter = "Yes";
}

else // NẾU KHÔNG
{
echo "Đây là trang web cho con nít. Bạn quá già nên không thể vào đây. Hẹn khi khác nhé !<br>";
$autorisation_enter = "No";
}

echo "Bạn có được phép vào không ? Câu trả lời là : $autorisation_enter";
?>
Bạn thử nói xem cái code trên đây hoạt động ra sao nào ?
Trước hết, tôi đã đặt rất nhiều câu lệnh giữa các dấu ngoặc móc, đừng quên rằng bạn có thể đặt nhiều lệnh vào giữa các dấu ngoặc móc nhé ! Kế đến, bạn để ý rằng tôi có thêm từ « else » (trong tiếng anh nghĩa là « nếu không »), rõ ràng hơn chút , ý tưởng của mình là « nếu tuổi nhỏ hơn hoặc bằng 12 thì làm cái này, nếu không thì làm cái kia ! »
Hãy thử sửa đổi một chút giá trị của biến $age và những lệnh bên trong để quen dần với cấu trúc này nhé !
Nhớ kĩ là bạn có thể thêm bao nhiêu lệnh tùy mục đích và tùy thích ! Ở ví dụ trên tôi đã cho in ra vài thứ và đã gán cho biến $autorisation_enter 2 giá trị khác nhau để xài cho ví dụ sau đây :

Code : PHP
<?php
if ($autorisation_enter == "Yes") // NẾU người ta được phép vào
{
//Lệnh thực hiện nếu người ta được phép vào
}

elseif ($autorisation_enter == "No") // NẾU KHÔNG NẾU người ta không được phép vào
{
// Lệnh thực hiện nếu người ta không được phép vào
}

else // NẾU KHÔNG (biến không phải Yes cũng không phải No, mình không xác định được phải xử sao)
{
echo "Ờ, tui không biết tuổi của chú, xin chú vui lòng cho biết tuổi được không ?";
}
?>

A, cuộc đời bắt đầu thêm rắc rối rồi đa !
Cái mới ở đây là từ khóa elseif (nếu không nếu) theo thứ tự, PHP sẽ gặp những điều kiện sau đây :
  • nếu $autorisation_enter bằng với yes, thì mình làm cái này
  • nếu không, nếu $autorisation_enter bằng với No thì mình làm cái kia
  • nếu không, mình hỏi lại tuổi để biết người đó có được phép vào hay không
Ban đầu biến không có chứa gì cả, mình nói là biến « rỗng », theo ngôn ngữ của máy thì giá trị của nó bằng NULL, nghĩa là « không có gì cả », để kiểm tra xem một biến có bị rỗng hay không, mình có thể viết if($bien==NULL)
Nhiều điều kiện cùng lúc :

Cố lên ! Còn chút xíu nữa là mình sẽ xong mục này ! Từ bây giờ mình sẽ thử làm cho cuộc đời thêm phức tạp chút nhé, từ từ rồi bạn cũng sẽ quen với từ phức tạp thôi, không phức tạp đâu có vui phải không nào ?
Để sử dụng nhiều điều kiện cùng lúc, trước tiên bạn cần nắm vài từ khóa mới :

Từ khóa ý nghĩa kí hiệu tương ứng
AND &&
OR hoặc ||

Ví dụ
Code : PHP
<?php
if ($age <= 12 AND $sex == "nam")
{
  echo "Chào mừng bạn đến với thế giới bạo lực !";
}
elseif ($age <= 12 AND $sex == "nu")
{
  echo "Chỗ này không dành cho con gái đâu, hãy về chơi búp bê đi bé ơi !";
}
?>

Tôi đã phát ngán và bạn cũng đã phát chán nghe giảng giải về cách hoạt động của đoạn mã trên rồi nhỉ ! Nếu bạn theo dõi kĩ từ nãy đến giờ thì đoạn mã bé tí tẹo này sao làm khó bạn được đúng không ?
Ráng làm thêm một ví dụ về OR nữa, rồi tôi hứa là sẽ dừng lại mục nhỏ này ở đây :

Code : PHP
<?php
if ($sex == "nu" OR $sex == "nam")
{
  echo "Chào người bình thường !";
}
else
{
  echo "Ớ, nếu bạn không phải nam cũng không phải nữ, bạn là pê-đê chắc ?";
}
?>

Trường hợp boolean (biến logic)
Ở chương trước mình có nói về cái gì là biến logic (Boolean) rồi nhỉ? Biến logic hay Boolean chỉ có hai giá trị là “true” hoặc “false” thôi! Dùng Boolean trong phần điều kiện này khá tiện lợi đấy!
Ở ví dụ trên, xém chút nữa là tôi đã xài Boolean rồi! Đố bạn biết là chỗ nào! Để tôi viết lại trong đoạn mã sau đây, rồi bạn coi thử có phải ý của bạn không nha :

Code : PHP
<?php
if ($autorisation_enter == true)
{
  echo "Chào mừng bạn đã lọt được vô đây :o)";
}
elseif ($autorisation_enter == false)
{
  echo "Bạn không được quyền vô đây đâu, mời ra cho !";
}
?>

Một cách viết khác linh hoạt hơn khi dùng biến boolean, mình có thể bỏ đi ==true hoặc ==false, mà PHP vẫn hiểu
Ví dụ :

Code : PHP
<?php
if ($autorisation_enter)
{
  echo " Chào mừng bạn đã lọt được vô đây:o)";
}
else
{
  echo " Bạn không được quyền vô đây đâu, mời ra cho!";
}
?>

Cách viết ngắn này sẽ rất thuận tiện cho mình về cách đọc mã, chẳng hạn mã trên đây mình có thể đọc : nếu được phép vào thì nói « chào mừng … »
Cách viết ngắn của chú chỉ muốn dùng khi muốn nói « nếu đúng thì » thôi, chứ nếu tui muốn nói « nếu không đúng » thì phải làm sao ?
Có một kí hiệu cho phép kiểm tra « nếu điều kiện sai », bạn chỉ cần thêm dấu chấm than ( !) vào trước biến là ổn, chẳng hạn if( !$autorisation_enter) được hiểu là « nếu không được phép vào », cách viết này tương đương với : if($autorisation_enter==false) .
Mẹo vặt
Hai đoạn mã sau đây đều cho ra cùng một kết quả :

Code : PHP
<?php
if ($variable == 23)
{
  echo "<strong>Hoan hô!</strong> Bạn đã tìm ra con số bí ẩn rồi !";
}
?>


Code : PHP
<?php
if ($variable == 23)
{
?>
<strong>Hoan hô !</strong> Bạn đã tìm ra con số bí ẩn rồi !

<?php
}
?>

Như bạn thấy, ở code thứ 2 tôi đã không dùng lệnh echo để in text ra nữa, thay vào đó tôi chỉ cần mở dấu ngoặc móc ra, rồi đóng dấu tag PHP lại (dấu ?> á), sau đó tôi muốn cho in ra cái gì cũng được bằng HTML, điều này thật tiện lợi khi cái mình cần in ra không phải chỉ một dòng mà là cả một trang thì dùng echo sẽ bị hạn chế về trình bày (trang trí hoa lá cành này nọ) hoặc dễ bị lỗi. Và sau khi xong việc, tôi đóng dấu ngoặc móc lại (chú ý là dấu ngoặc ngày luôn luôn phải được đặt trong tag PHP (<?php } ?>) )

Switch

Theo lý thuyết, chỉ với if…elseif….else thôi cũng đủ để chúng ta xử lý các điều kiện rồi !
Vậy sao chú còn làm cho cuộc đời thêm rắc rối mần chi ?
Đừng nóng, để cho các bạn thấy sự lợi hại của Switch, hãy xem ví dụ sau :

Code : PHP
<?php
if ($note == 0)
{
  echo "Bạn thật sự là một beginner !!!";
}

elseif ($note == 5)
{
  echo "Quá tệ";
}

elseif ($note == 7)
{
  echo "Dở";
}

elseif ($note == 10)
{
  echo "Gần được trung bình...";
}

elseif ($note == 12)
{
  echo "khá";
}

elseif ($note == 16)
{
  echo "Rất khá !";
}

elseif ($note == 20)
{
  echo "Giỏi !";
}

else
{
  echo "Xin lỗi, tôi không còn lời nào để nói về số điểm này";
}
?>

Bạn có thể ứng dụng cái này để làm bảng đánh giá kết quả trắc nghiệm được đấy. Bạn cũng thấy là cách viết này khá cồng kềnh, lại có sự lặp đi lặp lại phải không ? Hãy xem switch sẽ làm sao để giảm bớt cồng kềnh và lặp đi lặp lại này nhé :

Code : PHP
<?php
$note = 10;

switch ($note) {

case 0: // trong trường hợp $note có giá trị bằng 0
echo "Bạn thật sự là một beginner !!!";
break;

case 5: // trong trường hợp $note có giá trị bằng 5
echo "Quá tệ";
break;

case 7: // trong trường hợp $note bằng 7
echo "Dở";
break;
case 10: // vân vân
echo "Gần được trung bình...";
break;

case 12:
echo "Khá";
break;

case 16:
echo "Rất khá !";
break;

case 20:
echo "Giỏi !";
break;

default:
echo "Xin lỗi, tôi không còn lời nào để nói về số điểm này";

}
?>
default hơi hơi giống như else ở trên vậy, khi $note không mang giá trị nào ngoài các giá trị 0,2,4,..20 thì nó sẽ in ra câu mặc định cuối cùng !
Lệnh break ; yêu cầu PHP ra khỏi vòng switch. Nếu không có break, PHP sẽ kiểm tra lần lượt hết tất cả các trường hợp mà mình đã viết, như vậy khá mất thời gian (mà có khi sẽ làm cho kết quả không đúng nữa), nên mình phải dùng break để sau khi thực hiện xong việc cần làm rồi thì nó phải nhảy ra, không kiểm tra mấy cái linh tinh vớ vẩn kia nữa !
Khi nào thì dùng if, còn khi nào thì dùng switch ?
Cái này còn tùy vào kĩ năng trình bày và sự khéo léo của bạn. Nếu gặp một điều kiện ngắn và đơn giản bạn nên dùng if, còn nếu gặp một chuỗi điều kiện cần phân tích thì mình nên dùng switch để làm cho code của mình được rõ ràng hơn !

Hết chương 6


precedent chapter Mục Lục next chapter

Copyright© NGUYỄN Thanh Trà