2012-08-25 160 views
24

我正在尋找擴展我的PHP知識,並且我遇到了一些我不確定它是甚麼或者甚至是如何搜索它的東西。我正在看php.net isset代碼,並且我看到isset($_GET['something']) ? $_GET['something'] : ''

我瞭解正常的isset操作,如if(isset($_GET['something']){ If something is exists, then it is set and we will do something }但我不明白?,重複get,或:''。有人能幫我解決這個問題,或者至少讓我指出正確的方向嗎?

+2

相關http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol- mean-in-php – Musa

+1

可能的重複[什麼是PHP? :運算符調用,它是做什麼的?](http://stackoverflow.com/questions/1080247/what-is-the-php-operator-called-and-what-does-it-do) – Niko

回答

50

它通常被稱爲'速記'或Ternary Operator

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

意味着

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

進行分解:

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

或...

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

?被稱爲三元(有條件)運算符:example

6

這就是所謂的三元運算符,它主要用於代替if-else語句。

在你給它可以用來檢索數組給出isset值的例子返回true

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

相當於

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

當然,除非你指定的沒有多大用處它的東西,甚至可能爲用戶提交的值分配一個默認值。

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

您曾遇到過ternary operator。它的目的是基本的if-else語句。以下幾段代碼可以做同樣的事情。

三元:

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

的if-else:

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

從PHP 7,你可以把它寫更短:

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

這意味着,如果在將設置爲$age VAR的URL提供年齡PARAM,或將默認爲27

查看所有new features of php 7

1

如果你想要一個空字符串默認那麼首選方法是這些(根據您的需要)之一:

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

如果URL參數something並不在URL中存在然後$_GET['something']將返回null

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

和你的變量$value設爲一個空的字符串。

  • trim()可能超過strval()根據代碼者優先(如名稱參數可能希望使用它)
  • intval()如果只是數值預計,默認值是零。 intval(null) - >0

情況來考慮:

...&something=value1&key2=value2(典型值)

...&key2=value2(參數從網址$ _GET失蹤將返回null吧)

...&something=+++&key2=value(參數" "

爲什麼這是首選的a pproach:

  • 它適合在一條線上,並清楚發生了什麼事情。
  • 這是可讀比複製/粘貼錯誤的$value = isset($_GET['something']) ? $_GET['something'] : '';
  • 降低風險或一個錯字:$value=isset($_GET['something'])?$_GET['somthing']:'';
  • 這是與舊的和新的PHP兼容。

更新 嚴格模式可能需要這樣的事情:

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