2008-12-19 29 views
22

Tôi vừa duyệt một diễn đàn và có người hỏi về một tệp PHP mà họ đã tìm thấy trên web. Nó có một số điểm như thế này trong các mã:Điều kiện PHP, dấu ngoặc đơn cần thiết?

if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);

Tôi đã luôn luôn nghĩ rằng dấu ngoặc là cần thiết để gửi kèm theo những gì bạn muốn làm gì nếu điều kiện là đúng. Có một số thay thế khác, chẳng hạn như nếu nó là trên cùng một dòng bạn không?

Ngoài ra còn có một dòng như thế này: if ($action != ""): mail("$adminaddress","Visitor Comment from YOUR SITE",

bản năng của tôi là để nói điều này sẽ không làm việc, nhưng tôi cũng không biết nếu nó là một file PHP lỗi thời và nó được sử dụng để làm việc?

Trả lời

55

bạn có thể làm nếu báo cáo khác như thế này:

<?php 
if ($something) { 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
} 


if ($something) echo 'one conditional line of code'; 

if ($something) 
echo 'one conditional line of code'; 
echo 'a NON-conditional line of code'; // this line gets executed regardless of the value of $something 
?> 



và sau đó bạn cũng có thể viết nếu - khác trong một cú pháp thay thế:

<?php 
if ($something): 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
elseif ($somethingElse): 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
else: 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
endif; 
?> 



với thay thế cú pháp bạn cũng có thể rơi ra khỏi chế độ phân tích cú pháp như sau:

<?php 
if ($something): 
?> 
one conditional line of code<br /> 
another conditional line of code 
<?php 
else: 
    echo "it's value was: $value<br />\n"; 
?> 
another conditional line of code 
<?php 
endif; 
?> 

Nhưng điều này được thực sự lộn xộn thực sự nhanh chóng và tôi sẽ không khuyên bạn nên sử dụng nó (ngoại trừ có thể cho mẫu-logic).



và để làm cho nó hoàn thành:

<?php 
$result = $something ? 'something was true' : 'something was false'; 
echo $result; 
?> 

equals 

<?php 
if ($something) { 
    $result = 'something was true'; 
} else { 
    $result = 'something was false'; 
} 
echo $result; 
?> 
+2

Ồ, tôi không biết có quá nhiều tùy chọn để cấu trúc mã php. Cảm ơn! – Levi

+2

Nếu ví dụ cuối cùng, bạn không cần thêm biến: echo $ something? 'cái gì đó đúng': 'cái gì đó sai'; –

+0

Tôi biết nó hoạt động, nhưng tôi nghĩ rằng tôi đọc ở đâu đó rằng nó là một kết quả không được ghi chép (và do đó có thể thay đổi trong phiên bản tương lai). Không chắc chắn mặc dù. – Jacco

1

Niềng răng (không dấu ngoặc) là tùy chọn trong PHP, như trong cú pháp nhất C-như thế nào. Có lẽ bạn đang nghĩ đến Perl; chúng được yêu cầu ở đó, cho dạng cú pháp đó.

Điều đại tràng là một dạng cấu trúc điều khiển thay thế mà PHP hỗ trợ. Tôi ghét nó, nhưng một số người (đặc biệt là các nhà thiết kế hệ thống mẫu) yêu thích nó.

+0

Cảm ơn, nó phải có được rằng tôi đã học Perl đầu tiên và nó phải có được mặt nghiêm khắc hơn của tôi nghĩ rằng nó đã sai. – Levi

7

Để đi vào một chi tiết nhỏ hơn, lý do mà các niềng răng là không bắt buộc là cú pháp trông giống như:

if(CONDITION) BLOCK 
[elseif(CONDITION) BLOCK] 
[else BLOCK] 

BLOCK có thể là một tuyên bố duy nhất:

foo(); 

hoặc nó có thể là một nhóm tuyên bố kèm theo cú đúp:

{ 
    foo(); 
    bar(); 
} 
2

Theo ý kiến ​​của tôi

if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR); 

là hợp lệ, nhưng khó khăn hơn nhiều để đọc hơn:

if ($REMOTE_ADDR == "") { 
    $ip = "no ip"; 
} else { 
    $ip = getHostByAddr($REMOTE_ADDR); 
} 
+0

Tôi thích quy trình 'if (statement); else process2; 'tất cả trên các dòng riêng biệt. Nó trông giống như một với dấu ngoặc đơn, ngoại trừ không có dấu ngoặc đơn. – JVE999

-2
brackets are needed to enclose what you want to do if the condition is true 

Tôi không thể nghĩ ra bất kỳ ngôn ngữ mà đòi hỏi này

0

Vâng, không bao gồm niềng răng được cho phép, mặc dù nhiều lần tôi đã nghe 2 lý do không sử dụng cú pháp đó:

  1. Khó hơn o đọc. Ít rõ ràng hơn với một lập trình viên khác.
  2. Nếu bạn muốn thêm thứ gì đó vào bên trong, thì bạn cần phải thêm các dấu ngoặc cứng, sau đó khi bạn mã hóa lần đầu vì hầu hết các biên tập viên sẽ thêm dấu ngoặc đóng cho bạn.

Ngoài ra, có, cú pháp đại tràng là hợp lệ. Bạn có thể tìm thấy các lựa chọn thay thế tại đây: http://php.net/manual/en/control-structures.alternative-syntax.php

+0

--- 1. Khó đọc hơn. Ít rõ ràng hơn với một lập trình viên khác. Điều đó gây tranh cãi. Nhiều lập trình viên thích "hấp thụ" nhiều mã hơn với ít cuộn dọc hơn (tôi không nói rằng bạn phải viết vài ;;; hướng dẫn trên một dòng) Bằng cách này bạn có thể thấy rõ hơn "bức tranh lớn hơn". Nhưng tôi đồng ý, nó luôn tốt hơn cho chế độ gỡ lỗi. – PatlaDJ

Các vấn đề liên quan