我試圖給默認值的變量,如果沒有$ _GET他們。有一種方法if(isset(...))
,但它爲每個變量寫了一堆代碼。在研究另一種解決方案時發現了這段代碼。任何人都可以幫助我理解第二行代碼?幫我理解一段PHP代碼
$defaults = array('page' => 'main', 'lang' => 'en');
foreach ($defaults as $k => $v) $$k = isset($_GET[$k])? $_GET[$k] : $v;
我試圖給默認值的變量,如果沒有$ _GET他們。有一種方法if(isset(...))
,但它爲每個變量寫了一堆代碼。在研究另一種解決方案時發現了這段代碼。任何人都可以幫助我理解第二行代碼?幫我理解一段PHP代碼
$defaults = array('page' => 'main', 'lang' => 'en');
foreach ($defaults as $k => $v) $$k = isset($_GET[$k])? $_GET[$k] : $v;
<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;
}
}
從變量中分配變量是一種難看的方法。 你會發現一個名爲$page
有兩種$_GET[$k]
上或$v
變量的foreach結束(if $_GET[$k]
存在,這是一個三元運算符)
使用可變變量來實現自己的「提取物()」函數是醜陋的,但至少不像使用extract()本身那樣不安全。
基本上,它正在對數組進行循環。第一次迭代,$ K爲 '頁',$ v成爲 '主',代碼歸結爲:
make_variable_with_name('page') = isset($_GET['page']) ? $_GET['page'] : 'main';
您$默認變量形式:
$defaults = array('page' => 'main', 'lang' => 'en');
$$ķ機器會自動創建一個$ķ變量的內容的名稱的變量
所以basicaly的結果將是
$page = isset($_GET['page'])? $_GET['page'] : 'main';
第二行是說,對於默認數組中的每個項目,將索引放在$k
中,並將值放在$v
中。接下來,取值$k
並創建一個稱爲密鑰的變量,例如, $ page = ...接下來,檢查密鑰中是否有GET
的值,如果是,則設置例如$page
作爲該值,否則,將其設置爲它在數組中的值。
不知道這是有道理的......
有2件$defaults
,對於第一循環迭代它意味着:
if(isset($_GET[$k]))
{
$page=$_GET[$k];
}
else
{
$page='main';
}
對於第二循環迭代它意味着:
if(isset($_GET[$k]))
{
$lang=$_GET[$k];
}
else
{
$lang='en';
}
它很容易,如果你打破它爲多行解釋。
//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
變量。
這是每個循環遍歷$ defaults數組的循環。 循環中的語句(isset($_GET[$k])? $_GET[$k] : $v;
)是具有替代一行語法的普通if語句。
if(isset($_GET[$k]))
{
$$k = $_GET[$k];
}
else
{
$$k = $v;
}
雙美元符號你能讀到這裏:到它等於http://www.php.net/manual/en/language.variables.variable.php