2011-09-19 119 views
1

我試圖給默認值的變量,如果沒有$ _GET他們。有一種方法if(isset(...)),但它爲每個變量寫了一堆代碼。在研究另一種解決方案時發現了這段代碼。任何人都可以幫助我理解第二行代碼?幫我理解一段PHP代碼

$defaults = array('page' => 'main', 'lang' => 'en'); 
foreach ($defaults as $k => $v) $$k = isset($_GET[$k])? $_GET[$k] : $v; 

回答

5
<condition> ? <true> : <false> 

是短版

if (<condition>) { 
    <true> 
} else { 
    <false> 
} 

你的代碼更易讀:

$defaults = array('page' => 'main', 'lang' => 'en'); 
foreach ($defaults as $key => $value) { 
    if (isset($_GET[$key])) { 
    // $$key expands to $page and $lang 
    $$key = $_GET[$key]; 
    } else { 
    $$key = $value; 
    } 
} 
2

從變量中分配變量是一種難看的方法。 你會發現一個名爲$page有兩種$_GET[$k]上或$v變量的foreach結束(if $_GET[$k]存在,這是一個三元運算符)

1

使用可變變量來實現自己的「提取物()」函數是醜陋的,但至少不像使用extract()本身那樣不安全。

基本上,它正在對數組進行循環。第一次迭代,$ K爲 '頁',$ v成爲 '主',代碼歸結爲:

make_variable_with_name('page') = isset($_GET['page']) ? $_GET['page'] : 'main'; 
0

您$默認變量形式:

$defaults = array('page' => 'main', 'lang' => 'en'); 

$$ķ機器會自動創建一個$ķ變量的內容的名稱的變量

所以basicaly的結果將是

$page = isset($_GET['page'])? $_GET['page'] : 'main'; 
0

第二行是說,對於默認數組中的每個項目,將索引放在$k中,並將值放在$v中。接下來,取值$k並創建一個稱爲密​​鑰的變量,例如, $ page = ...接下來,檢查密鑰中是否有GET的值,如果是,則設置例如$page作爲該值,否則,將其設置爲它在數組中的值。

不知道這是有道理的......

1

有2件$defaults,對於第一循環迭代它意味着:

if(isset($_GET[$k])) 
{ 
$page=$_GET[$k]; 
} 
else 
{ 
$page='main'; 
} 

對於第二循環迭代它意味着:

if(isset($_GET[$k])) 
{ 
$lang=$_GET[$k]; 
} 
else 
{ 
$lang='en'; 
} 
1

它很容易,如果你打破它爲多行解釋。

//This associative array defines your default values 
$defaults = array('page' => 'main', 'lang' => 'en'); 

//This loops through that array, setting 
// $k to each key, and 
// $v to each value 
foreach ($defaults as $k => $v) 
{ 
    //$$k references a variable called $k, 
    //For instance, on the first time through the loop, 
    // it references a variable called $page 

    //isset($_GET($k]) checks if the browser sent a value 
    // for the key $k. 

    //The ternary operate (?:) returns that value if the 
    // browser sent it, or returns the value from the $defaults 
    // array if the browser did not. 
    $$k = isset($_GET[$k])? $_GET[$k] : $v; 
} 

因此,這裏發生了最先進,最常見的就是$$k它只是讓你引用一個名爲$k變量