我试图给默认值的变量,如果没有$ _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