2012-08-25 31 views
24

Tôi đang tìm cách mở rộng kiến ​​thức về PHP của mình, và tôi bắt gặp một cái gì đó mà tôi không chắc chắn nó là gì hoặc làm thế nào để tìm kiếm nó. Tôi đang xem mã tập hợp php.net và tôi thấy isset($_GET['something']) ? $_GET['something'] : ''

Tôi hiểu các hoạt động bình thường, chẳng hạn như if(isset($_GET['something']){ If something is exists, then it is set and we will do something } nhưng tôi không hiểu?, Lặp lại việc nhận lại,: hoặc ''. Ai đó có thể giúp phá vỡ này xuống cho tôi hoặc ít nhất là điểm tôi đi đúng hướng?

+2

liên quan http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol- mean-in-php – Musa

+1

bản sao có thể có của [PHP là gì? : toán tử được gọi và nó làm gì?] (http://stackoverflow.com/questions/1080247/what-is-the-php-operator-called-and-what-does-it-do) – Niko

Trả lời

50

Nó thường được gọi là 'viết tắt' hoặc Ternary Operator.

$test = isset($_GET['something']) ? $_GET['something'] : ''; 

nghĩa

if(isset($_GET['something'])) { 
    $test = $_GET['something']; 
} else { 
    $test = ''; 
} 

Để phá vỡ nó xuống:

$test = ... // assign variable 
isset(...) // test 
? ... // if test is true, do ... (equivalent to if) 
: ... // otherwise... (equivalent to else) 

Hoặc ...

// test --v 
if(isset(...)) { // if test is true, do ... (equivalent to ?) 
    $test = // assign variable 
} else { // otherwise... (equivalent to :) 
1

? được gọi là toán tử Ternary (điều kiện): example

6

Được gọi là toán tử bậc ba và được sử dụng chủ yếu thay cho câu lệnh if-else.

Trong ví dụ bạn đã cho nó có thể được sử dụng để lấy một giá trị từ một mảng isset trao trả về true

isset($_GET['something']) ? $_GET['something'] : '' 

tương đương với

if (isset($_GET['something'])) { 
    $_GET['something']; 
} else { 
    ''; 
} 

Tất nhiên nó không phải sử dụng nhiều, trừ khi bạn gán nó đến một cái gì đó, và thậm chí có thể gán một giá trị mặc định cho một giá trị người dùng gửi.

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous' 
4

Bạn đã gặp phải ternary operator. Đó là mục đích của câu lệnh if-else cơ bản. Các đoạn mã sau đây cũng làm như vậy.

ternary:

$something = isset($_GET['something']) ? $_GET['something'] : "failed"; 

Nếu-else:

if (isset($_GET['something'])) { 
    $something = $_GET['something']; 
} else { 
    $something = "failed"; 
} 
1

gì bạn đang tìm kiếm được gọi là một Ternary Operator, và bạn có thể tìm PHP implementation here. Đó là tuyên bố if else.

if (isset($_GET['something']) == true) { 
    thing = isset($_GET['something']); 
} else { 
    thing = ""; 
} 
3

Từ php 7 bạn có thể viết nó thậm chí còn ngắn hơn:

$age = $_GET['age']) ?? 27; 

Và điều này có nghĩa là nếu param tuổi được cung cấp trong url nó sẽ được thiết lập để $age var, hoặc sẽ mặc định 27

Xem tất cả new features of php 7

1

Nếu bạn muốn mặc định chuỗi rỗng thì cách ưa thích là một trong những tùy chọn này (tùy thuộc vào nhu cầu của bạn):

$str_value = strval($_GET['something']); 
$trimmed_value = trim($_GET['something']); 
$int_value = intval($_GET['somenumber']); 

Nếu tham số url somethingkhông tồn tại trong url sau đó $_GET['something']sẽ trở lại null

strval($_GET['something']) ->strval(null) ->""

và biến $value của bạn được thiết lập để một chuỗi rỗng.

  • trim() có thể được ưa thích hơn strval() tùy thuộc vào mã (ví dụ một tham số Name có thể muốn sử dụng nó)
  • intval() nếu chỉ các giá trị số được kỳ vọng và mặc định là zero. intval(null) ->0

Các trường hợp để xem xét:

...&something=value1&key2=value2 (điển hình)

...&key2=value2 (tham số thiếu từ url $ _GET sẽ trả về null cho nó)

...&something=+++&key2=value (tham số là " ")

Tại sao đây là ưu tiên pproach:

  • Nó phù hợp gọn gàng trên một dòng và rõ ràng những gì đang diễn ra.
  • Đó là có thể đọc được hơn $value = isset($_GET['something']) ? $_GET['something'] : '';
  • thấp hơn nguy cơ sao chép/dán nhầm lẫn hoặc một typo: $value=isset($_GET['something'])?$_GET['somthing']:'';
  • Nó tương thích với cũ và php mới hơn.

Cập nhật chế độ nghiêm ngặt có thể đòi hỏi một cái gì đó như thế này:

$str_value = strval(@$_GET['something']); 
$trimmed_value = trim(@$_GET['something']); 
$int_value = intval(@$_GET['somenumber']); 
Các vấn đề liên quan