|
|
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, …
Cấu trúc cơ bản : If … elseMì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:
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 … elseSau đây là thứ tự cần tuân theo khi dùng cấu trúc if…else
Code : PHP
<?php
Ở đâ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é!”if ($age <= 12) { echo "chào nhóc con !"; } ?> Để ý 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
Bạn thử nói xem cái code trên đây hoạt động ra sao nào ? $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"; ?> 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 :
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 :
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 } ?>) ) SwitchTheo 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 |