2011-09-19 499 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变量