我正在尝试解决PHP练习但无法理解正在发生的事情

时间:2015-05-14 17:32:40

标签: php arguments globals

首先,我很抱歉我不相关的问题标题,因为我不知道如何更好地写它。

首先,我是一名PHP初学者。我正在解决一些PHP练习,我遇到了一个我不知道从哪里开始的问题:

function q3() {
// I am supposed to write stuff here and not change anything to get the question right.
}
function a3($admin = false) {
assertion_group("Question 3");

foreach ($GLOBALS as $k => $v) $$k = $v;
if ($admin) {
    $file = q3("edsi.pem");
}
$key = @file_get_contents($file);
$key = substr($key, 0, 4);
assert($key == substr(file_get_contents(__FILE__), 0, 4));

return $key;
}

首先,我了解$GLOBALS的作用,但为什么要将$$k分配给$v(因此$ k值为$ v值)? $GLOBALS是否获取函数中的值?

如何设置$admin = true?我相信q3(),但我不知道如何......

让我感到困惑的另一件事 {strong> $file = q3("edsi.pem") 。因为我的q3函数没有任何参数,并且我不应该添加一个参数,我该如何使用它?!

非常感谢大家的回答。我再次为这个非常含糊的问题道歉......

修改

在@mario的帮助下,为了更好地理解整个混乱,基本上我必须放在q3中的是:

if ($info == 'edsi.pem') {
    $info = __FILE__;
    return $info;
}  

加上q3q3($info))的参数,并在标题中添加?admin=true ...

再次感谢!

1 个答案:

答案 0 :(得分:1)

  

首先,我理解$ GLOBALS的作用,但为什么要将$$ k分配给$ v(所以将$ k值分配给$ v值)? $ GLOBALS是否在函数中获取值?

foreach … $$k = $v;代码段的作用基本上是extract($GLOBALS);

这不是传递参数的非常有用的方法。使用全局变量只有在它们具有某种描述性名称时才有意义,并且如果它们不被误用作不同代码部分之间的状态标志。

不,并不是所有函数都没有全局变量。阅读variable scope

  

如何设置$ admin = true?我相信通过q3(),但我不知道如何......

你在这里混淆了函数名称(正是因为它们不是很有用的函数名)。您可以在调用a3()时传递$ admin参数:

a3(true);
  

最让我困惑的是:$ file = q3(“edsi.pem”)。因为我的q3函数没有任何参数,并且我不应该添加一个参数,我该如何使用它?!

q3中获取参数的唯一方法是func_get_arg()

再次真的,除非这是关于如何编写代码或关于奇怪用例的教程的练习,否则你不应该再烦恼了。