Có một số bình luận đùa và gây hiểu lầm, thậm chí một phần thông tin không chính xác trong các câu trả lời ở đây. Tôi muốn cố gắng cải thiện chúng
Đầu tiên, như một số người đã chỉ ra, bạn có một lỗi trong mã liên quan đến câu hỏi
if [$status = 'clear' AND $pRent == 0]
nên là [lưu ý
if [$status == 'clear' AND $pRent == 0]
5 thay vì if [$status == 'clear' AND $pRent == 0]
0 trong phần đầu tiên]if [$status == 'clear' AND $pRent == 0]
mà trong trường hợp này là chức năng tương đương với
if [$status == 'clear' && $pRent == 0]
Thứ hai, lưu ý rằng các toán tử này [
if [$status == 'clear' AND $pRent == 0]
1] là toán tử đoản mạch. Điều đó có nghĩa là nếu câu trả lời có thể được xác định một cách chắc chắn từ biểu thức đầu tiên, thì biểu thức thứ hai sẽ không bao giờ được đánh giá. Một lần nữa, điều này không quan trọng đối với dòng đã sửa lỗi của bạn ở trên, nhưng nó cực kỳ quan trọng khi bạn kết hợp các toán tử này với các phép gán, bởi vìThứ ba, sự khác biệt thực sự giữa
if [$status == 'clear' AND $pRent == 0]
2 và if [$status == 'clear' AND $pRent == 0]
3 là quyền ưu tiên toán tử của chúng. Cụ thể, tầm quan trọng là if [$status == 'clear' AND $pRent == 0]
3 có mức độ ưu tiên cao hơn toán tử gán [if [$status == 'clear' AND $pRent == 0]
5] trong khi if [$status == 'clear' AND $pRent == 0]
2 có mức độ ưu tiên thấp hơn toán tử gán. Do đó, trong một câu lệnh kết hợp việc sử dụng phép gán và đánh giá logic, điều quan trọng là bạn chọn cái nàoCác ví dụ đã sửa đổi từ trang của PHP trên các toán tử logic
if [$status == 'clear' AND $pRent == 0]
0sẽ ước tính cho
if [$status == 'clear' AND $pRent == 0]
7 và gán giá trị đó cho if [$status == 'clear' AND $pRent == 0]
8, bởi vì if [$status == 'clear' AND $pRent == 0]
9 có quyền ưu tiên toán tử cao hơn if [$status == 'clear' AND $pRent == 0]
0, và do đó về cơ bản nó sẽ đánh giá như thế nàyif [$status == 'clear' AND $pRent == 0]
5tuy nhiên
if [$status == 'clear' AND $pRent == 0]
6sẽ gán
if [$status == 'clear' && $pRent == 0]
1 cho if [$status == 'clear' AND $pRent == 0]
8 [sau đó thực hiện thao tác if [$status == 'clear' && $pRent == 0]
3 và đánh giá if [$status == 'clear' AND $pRent == 0]
7] vì if [$status == 'clear' AND $pRent == 0]
0 có mức độ ưu tiên toán tử cao hơn if [$status == 'clear' && $pRent == 0]
3, về cơ bản đánh giá như thế nàyif [$status == 'clear' AND $pRent == 0]
3Thực tế là sự mơ hồ này thậm chí còn tồn tại khiến nhiều lập trình viên luôn sử dụng
if [$status == 'clear' AND $pRent == 0]
3 và sau đó mọi thứ hoạt động rõ ràng như người ta mong đợi ở một ngôn ngữ như C, tức là. hoạt động logic đầu tiên, sau đó chuyển nhượngMột số ngôn ngữ như Perl sử dụng loại cấu trúc này thường xuyên ở định dạng tương tự như thế này
if [$status == 'clear' AND $pRent == 0]
5Về mặt lý thuyết, điều này sẽ chỉ định kết nối cơ sở dữ liệu cho
if [$status == 'clear' && $pRent == 0]
8 hoặc nếu điều đó không thành công [và ở đây chúng tôi giả định rằng hàm sẽ trả về thứ gì đó có giá trị là if [$status == 'clear' && $pRent == 0]
1 trong trường hợp đó], nó sẽ kết thúc tập lệnh bằng một thông báo lỗi. Do đoản mạch, nếu kết nối cơ sở dữ liệu thành công, thì if [$status == 'clear' AND $pRent == 0]
00 sẽ không bao giờ được đánh giáMột số ngôn ngữ cho phép cấu trúc này thẳng tay cấm gán trong các câu lệnh logic/điều kiện [như Python] để loại bỏ sự mơ hồ theo cách ngược lại
PHP đồng ý cho phép cả hai, vì vậy bạn chỉ cần tìm hiểu về hai tùy chọn của mình một lần và sau đó viết mã theo cách bạn muốn, nhưng hy vọng bạn sẽ nhất quán theo cách này hay cách khác
Bất cứ khi nào nghi ngờ, chỉ cần thêm vào một bộ dấu ngoặc đơn, điều này sẽ loại bỏ mọi sự mơ hồ. Những điều này sẽ luôn giống nhau
if [$status == 'clear' AND $pRent == 0]
9Được trang bị tất cả những kiến thức đó, tôi thích sử dụng
if [$status == 'clear' AND $pRent == 0]
2 hơn vì tôi cảm thấy rằng nó làm cho mã dễ đọc hơn. Tôi chỉ có một quy tắc là không kết hợp các bài tập với các đánh giá logic. Nhưng tại thời điểm đó, đó chỉ là một sở thích và tính nhất quán ở đây quan trọng hơn nhiều so với việc bạn chọn bên nào Ngôn ngữ PHP cung cấp hai lệnh điều khiển nhánh. if-elseif-else and switch-case, same with a phép toán phụ, gọi là phép toán điều kiện. Các lệnh điều khiển rẽ nhánh chỉ là hai trong số rất nhiều lệnh điều khiển khác của PHP
ĐỘI DUNG CỦA BẢN DỊCH Ẩn
1. Giới thiệu chung về lệnh điều khiển trong PHP
2. Lệnh nhánh nếu trong PHP
3. Lệnh if-else lồng nhau, elseif
4. Phép toán điều kiện ?. trong PHP
5. Lệnh nhiều nhánh switch / case
6. Cú pháp khác của if và switch
7. Kết luận
Giới thiệu chung về các lệnh điều khiển trong PHP
Trong tất cả các ví dụ thực hiện từ đầu đến giờ, mã đều thực hiện theo trật tự tuyến tính. lệnh viết trước nào sẽ thực hiện trước
Thực hiện mã theo trật tự tuyến tính là không đủ để xây dựng tập lệnh với logic phức tạp. Ví dụ, trong nhiều trường hợp, chúng ta muốn thực hiện lệnh nếu đạt được một điều kiện nhất định, hoặc lặp lại việc thực hiện một nhóm lệnh
Để thực hiện các logic phức tạp, PHP, giống như nhiều ngôn ngữ lập trình mệnh lệnh khác, cung cấp các mệnh lệnh điều khiển [các câu lệnh điều khiển luồng]
Lệnh điều khiển thay đổi quy trình tự động thực thi mã thông thường và giúp thực thi những ý tưởng phức tạp hơn của người lập trình
PHP has the following command
- Điều khiển rẽ nhánh nếu
- Điều khiển bổ sung nhiều công tắc nhánh
- Điều khiển bật trong khi
- It set control. trong khi
- It control for
- foreach control
- Điều khiển exit và return
- Goto goto control jump to goto
- Điều khiển kiểm tra ngoại lệ thử. chụp lấy
Các lệnh điều khiển đều thuộc nhóm mệnh lệnh [câu lệnh]. Chúng đồng thời còn là những mệnh lệnh phức tạp do chúng có thể chứa nhiều lệnh bên trong
Các lệnh điều khiển rẽ nhánh if và switch sẽ được trình bày trong bài học này. Các lệnh điều chỉnh vòng lặp sẽ học trong bài tiếp theo. Điều khiển thoát sẽ học trong bài viết về hàm. Điều khiển kiểm soát ngoại lệ sẽ học riêng trong bài học về ngoại lệ
Riêng lệnh nhảy goto không được khuyến khích sử dụng do nó phá vỡ cấu trúc tính toán của mã. Vì vậy chúng ta sẽ không xem xét lệnh này
Lệnh rẽ nhánh nếu trong PHP
Vui lòng xem ví dụ sau đây
if [$status == 'clear' && $pRent == 0]
1Trong ví dụ trên chúng ta sử dụng hàm
if [$status == 'clear' && $pRent == 0]
23. Hàm này trả về vị trí cuối cùng mà xâu con $needle xuất hiện trong xâu lớn nhất $haystack. Nếu không tìm thấy xâu con, hàm sẽ trả về falseChúng ta sử dụng hàm stripos[] để kiểm tra tên người dùng đăng nhập. nếu có cụm từ 'trump' thì trong lời chào đặc biệt; . Tức là, lệnh thực thi sẽ phụ thuộc vào tên cuộc gọi có chứa cụm từ 'trump' hay không
Kết quả chạy chương trình với hai dữ liệu khác nhau
if [$status == 'clear' && $pRent == 0]
2If quen thuộc với C, bạn sẽ thấy cấu trúc này hoàn toàn tương tự
if [$status == 'clear' && $pRent == 0]
4in which
- Biểu thức phải được sửa đổi về giá trị boolean. Thực tế, PHP có thể tự động chuyển đổi các giá trị khác về kiểu boolean. Ví dụ, 0 về false, null string về false, v. v
- Biểu thức phải được đặt trong dấu ngoặc kép []. Vòng trích dẫn thiếu cặp sẽ dẫn đến lỗi cú pháp
- If after if have many command, they must set in the cặp dấu {}. Các lệnh nằm trong cặp {} tạo thành một khối mã [code block]. If after if only have a command, not need to cặp {}
Trong ví dụ này, bạn cũng đã thấy mã khối sau của lệnh nếu còn từ khóa khác và một mã khối nữa. Mã khối và từ khóa khác này là một mệnh đề [mệnh đề] khác của lệnh nếu
Nếu sử dụng sơ đồ khối [biểu đồ luồng], lệnh if-else được biểu diễn như sau
Ở đây luồng thực thi phân chia làm hai và chỉ thực hiện theo một trong hai đường, nên lệnh if-else còn được gọi là lệnh rẽ nhánh
Như đã nói, khi biểu thức của if tính ra giá trị đúng thì thực hiện khối mã của if. Trong trường hợp còn lại [biểu thức của if tính ra sai] thì sẽ thực thi mã khối của other
Các lệnh if-else lồng nhau, elseif
Do if-else cũng chỉ là các lệnh, bạn có thể lồng các lệnh if-else với nhau nếu cần diễn đạt những logic phức tạp hơn. Ví dụ
if [$status == 'clear' && $pRent == 0]
5Trong ví dụ này, tùy thuộc vào tên người nhập chúng ta sẽ đưa ra lời chào nhau. Ví dụ, tên trump sẽ nhận được lời chào ‘Mr. tổng thống. ’, tên obama sẽ nhận được lời chào ‘Mr. Obama. Rất vui được gặp bạn. ’. If enter a outside the name has been known before [trump, obama, bush, clinton] thì lời chào chung là ‘Welcome to PHP’
Rất dễ thấy việc lồng các lệnh if – other như trên rất khó đọc
You could write back script on as after
if [$status == 'clear' && $pRent == 0]
6Ở đây chúng ta vận dụng một mệnh đề đặc biệt của lệnh if-else. đề khác nếu
Về mặt ý nghĩa nó giống như cách bạn lồng một lệnh nếu mới trong mệnh đề khác của lệnh nếu bên ngoài. Tuy nhiên, mệnh đề otherif giúp mã dễ đọc dễ theo dõi hơn nhiều
Nếu sử dụng sơ đồ khối, bạn có thể biểu diễn lệnh if-elseif-else như sau
Một cách khác tốt hơn để giải quyết các vấn đề tương tự là sử dụng lệnh switch-case. Chúng ta sẽ xem xét trường hợp chuyển đổi ở phần sau của bài học
Cùng lấy một ví dụ khác
if [$status == 'clear' && $pRent == 0]
7Trong ví dụ này, bạn yêu cầu nhập giá trị tuổi. Tùy chọn độ tuổi sẽ cung cấp thông tin tương ứng về cấp học
Ở đây các mệnh khác nếu cho phép dễ dàng phân chia tuổi thành các khoảng [. 0], [0, 2], [2, 6], [6, 12], [12, 16], [16, 18], [18…]. Nếu vẫn sử dụng lệnh if lồng nhau sẽ rất khó theo dõi
Điều kiện toán học ?. trong PHP
Construction if-else you view on is a statement, mean is it Thực hiện lệnh nhưng không trả về kết quả. Nếu bạn muốn gán giá trị cho biến tùy biến theo điều kiện cụ thể, bạn có thể sử dụng lệnh if-else như sau
if [$status == 'clear' && $pRent == 0]
8Ở đây, thay vì trực tiếp trong lệnh echo, bạn gán giá trị cho biến $greeting tùy thuộc vào giá trị $name. Last last only play a echo command
Bạn có thể sử dụng phép toán điều kiện [toán tử có điều kiện] để đơn giản hóa công việc gán giá trị như sau
if [$status == 'clear' && $pRent == 0]
9Đoạn mã dùng phép toán điều kiện và đoạn mã dùng lệnh nếu tương đương nhau. Chỉ là cách viết của phép toán điều kiện rút ngắn xúc tích hơn
Cú pháp chung của phép điều kiện toán học như sau
if [$status == 'clear' AND $pRent == 0]
0Theo đó, nếu biểu thức logic nhận giá trị đúng thì biến $kết quả sẽ nhận giá trị 1, ngược lại sẽ nhận giá trị 2
Phép toán điều kiện là phép toán ternary [phép toán có 3 hạng hạng] duy nhất trong PHP
Lệnh chuyển đổi nhiều nhánh / trường hợp
Khi có nhiều điều kiện khác nhau, bạn có thể lồng các lệnh cho nhau hoặc sử dụng các mệnh đề khác nếu như trên
Để đơn giản hơn nữa trong công việc viết các lệnh nhiều nhánh, PHP cung cấp một lệnh đặc biệt. lệnh switch – case
Vui lòng xem ví dụ sau đây
if [$status == 'clear' AND $pRent == 0]
1Trong cấu trúc này, PHP sẽ lấy biểu thức của công tắc lệnh và lần so sánh với hằng số của từng 'trường hợp'. Nếu khớp với hằng số của trường hợp bất kỳ thì lệnh đi sau trường hợp đó [cho đến lệnh ngắt tương ứng] sẽ được thực thi
Bạn có thể cấu hình switch-case-default trong ví dụ trên giống như một hệ thống if-elseif-else. Trong đó, mỗi trường hợp tương đương với biểu thức so sánh bằng ở mỗi mệnh đề khác, và phần mặc định tương tự như mệnh đề khác
Phần mặc định không bắt buộc trong cấu trúc switch – case. Nếu có mặt mặc định và biểu thức KHÔNG so khớp được với bất kỳ trường hợp nào thì mã khối mặc định sẽ được thực thi
If NOT has the default and the expression NOT so match being with any case any, then not any case any are done thi
Từ khóa break ở mỗi trường hợp chắc chắn rằng, nếu tìm thấy một trường hợp phù hợp [và thực thi xong phần mã khối tương ứng], PHP sẽ thoát khỏi lệnh break mà không tiếp tục kiểm tra các trường hợp tiếp theo
Từ khóa ngắt ở mỗi trường hợp không bắt buộc. Tuy nhiên, bạn nên sử dụng ngắt cho từng trường hợp. Các IDE cũng đưa ra thông báo nếu bạn quên ngắt một trường hợp
Điều gì xảy ra nếu bạn bỏ ngắt?
Nếu trong một trường hợp nào đó bạn không sử dụng ngắt, và giá trị biểu thức khớp với hằng số của trường hợp đó, đầu tiên . Tuy nhiên, sau đó PHP vẫn sẽ tiếp tục xử lý giá trị biểu thức để khớp với hằng của trường hợp tiếp theo. Điều này thường dẫn đến thao tác so sánh dư thừa, vì switch-case thường được thiết kế để mỗi lần chạy chỉ có 1 trường hợp được thực hiện.
Nếu bạn cần mô phỏng điều kiện 'hoặc' – thực thi mã khối nếu biểu thức có giá trị 1 HOẶC giá trị 2 HOẶC giá trị 3, bạn cần sử dụng một kỹ thuật khác của switch-case
Please view ví dụ sau
if [$status == 'clear' && $pRent == 0]
20Trong trường hợp này, nếu $name có giá trị 'trump', hoặc 'obama', hoặc 'bush' sẽ đồng loạt kích hoạt một nhóm lệnh. Cách sử dụng trường hợp như vậy có tên gọi là rơi qua [trượt qua]. Khi sử dụng không thành công, bạn nên viết bình luận bên cạnh để tránh lộn xộn
Cú pháp khác của if và switch
Cách viết khối mã thân của lệnh if-else và switch-case as on được tham khảo từ lối viết tương ứng của C. You can continue use normal
Tuy nhiên, khi trộn mã PHP với văn bản và bản khác [chẳng hạn như HTML], hãy tiếp tục viết mã khối với các dấu ngoặc nhọn tương đối khó theo dõi
PHP cung cấp một cú pháp khác để viết các cấu trúc này. Please view ví dụ sau
if [$status == 'clear' && $pRent == 0]
21Trong cú pháp này không sử dụng cặp dấu ngoặc kép {} để phân tích mã khối mà sử dụng dấu hai chấm
if [$status == 'clear' && $pRent == 0]
24. Khối mã kết thúc với từ khóa endif. Sau dấu hai chấm và trước từ khóa tiếp theo [elseif hoặc other] sẽ là mã khối. Loại cú pháp này rất tiện lợi để chèn các đoạn văn bản HTML vào thân của lệnh