Khi bạn tự tin hơn với mã PHP của mình, mã của bạn sẽ ngày càng phức tạp hơn. Câu lệnh PHP switch đơn giản hóa logic PHP của bạn, thay thế các câu lệnh if lộn xộn khi cố gắng đưa ra các quyết định đơn giản dựa trên giá trị của một biến. Đọc để tìm hiểu làm thế nào để sử dụng nó
Cú pháp chuyển đổi PHP
switch[$v] { case $a: # Code to be executed if $v is equal to $a break; case $b: # Code to be executed if $v is equal to $b break; case $c: # Code to be executed if $v is equal to $c break; ... default; # Default code to be executed if no condition met }
Lưu ý rằng
- Câu lệnh switch được theo sau bởi biến hoặc giá trị để so sánh
- Các câu lệnh trường hợp bên trong khối công tắc được theo sau bởi biến hoặc giá trị thứ hai để so sánh
- Mã sau dấu hai chấm trong câu lệnh tình huống sẽ chỉ thực thi nếu giá trị switch và case khớp nhau
- Chỉ cho phép một trường hợp mặc định, trường hợp này sẽ thực thi nếu không tồn tại câu lệnh ngắt trước đó
- Câu lệnh break ngăn không cho bất kỳ trường hợp nào sau đây được kiểm tra, do đó ngăn không cho mã của chúng chạy
- Câu lệnh tiếp tục có thể được sử dụng thay cho dấu ngắt
- continue chấp nhận một đối số số tùy chọn cho biết nó nên bỏ qua bao nhiêu cấp vòng lặp kèm theo – xem ở phần sau của bài viết để biết điều này có nghĩa là gì trong các câu lệnh switch
- chuyển đổi/trường hợp thực hiện so sánh lỏng lẻo theo mặc định
- Điều này có nghĩa là 2 và “2” bằng nhau – cũng như 0 và FALSE – vì loại biến bị bỏ qua
- Xem ở phần sau của bài viết về cách sử dụng phép so sánh nghiêm ngặt trong đó loại biến được xem xét
chuyển đổi Ví dụ
Hãy xem xét chuỗi câu lệnh if/elseif in thông tin về một số sau đây
if [$var == 0] { echo "$var equals 0"; } elseif [$var == 1] { echo "$var equals 1"; } elseif [$var == 2] { echo "$var equals 2"; } else [ echo "i is not equal to 0, 1, or 2"; ]
Đây là chức năng tương tự, nhưng sử dụng câu lệnh switch để thay thế
switch [$var] { case 0: echo "$var equals 0"; break; case 1: echo "$var equals 1"; break; case 2: echo "$var equals 2"; break; default: echo "i is not equal to 0, 1, or 2"; }
Điều này dễ viết hơn rất nhiều và cũng dễ đọc hơn rất nhiều
Câu lệnh break có thể bỏ qua trường hợp nếu bạn muốn tiếp tục so sánh thêm
switch [$var] { case 0: case 1: echo "$var equals 0 or 1"; break; case 2: echo "$var equals 2"; break; default: echo "i is not equal to 0, 1, or 2"; }
Ở trên, nếu $var bằng 0 hoặc 1, câu lệnh trường hợp sẽ được thực thi cho tất cả các trường hợp không bị phá vỡ ở trên nó
Các loại biến
Như đã đề cập trước đó, switch/case thực hiện so sánh lỏng lẻo theo mặc định
Có một mẹo để giải quyết vấn đề này – kiểm tra xem tất cả các trường hợp đều đúng hay không và biến tất cả các trường hợp thành biểu thức boolean thực hiện so sánh nghiêm ngặt
$var = 0; switch [true] { case [$var === true]: echo '$var is true'; break; case [$var === false]: echo '$var is false'; break; case [$var === 0]: echo '$var is 0'; break; }
Chỉ trường hợp cuối cùng ở trên mới chạy, vì các phép so sánh nghiêm ngặt sẽ không đánh giá 0 là sai. So sánh trường hợp sẽ thành công vì điều kiện trong ngoặc sẽ đánh giá là đúng và khớp với giá trị của câu lệnh chuyển đổi
Điều này cũng có thể được sử dụng để cung cấp các phép so sánh kiểm tra những thứ khác ngoài sự bằng nhau dưới dạng trường hợp, chẳng hạn như lớn hơn hoặc nhỏ hơn
$var = 0; switch [true] { case [$var < 1]: echo '$var is less than 1'; break; case [$var > 1]: echo '$var is greater than 1'; break; }
Sử dụng tiếp tục thay vì ngắt
Nếu đang sử dụng câu lệnh switch trong một vòng lặp, thì bạn có thể sử dụng câu lệnh tiếp tục thay vì ngắt để kết thúc các hành động trong câu lệnh switch, cũng như để chuyển sang bước lặp tiếp theo trong vòng lặp có trong vòng lặp đó
Điều này được thực hiện bằng cách cung cấp một đối số số để tiếp tục cho nó biết số lượng vòng lặp bao quanh nên được bỏ qua – và nó tính câu lệnh switch là một vòng lặp cho mục đích này. Ví dụ
$array = [1, 2, 3]; foreach[$array as $vartem] { switch[$vartem] { case 1: echo 'a'; continue 2; case 2: echo 'b'; continue 2; default: echo 'c'; continue 2; } echo 'x'; }
… sẽ xuất ra
abcx
Vì câu lệnh tiếp tục 2 đang bỏ qua các trường hợp còn lại trong câu lệnh switch cũng như vòng lặp foreach mà chúng được chứa trong
Nhấp vào đây để xem tài liệu PHP chính thức cho câu lệnh switch và Xem các bài viết về lập trình PHP khác của chúng tôi