Прежде всего, я очень сожалею о своем неуместном названии вопроса, поскольку я не знал, как написать это лучше.
Начнем с того, что я новичок в 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()
но я не вижу как …
Следующая вещь, которая смущает меня самый является: $file = q3("edsi.pem")
. Так как моя функция q3 не имеет аргументов, и я не должен ее добавлять, как я могу ее использовать ?!
Заранее всем большое спасибо за ваш ответ. Снова извиняюсь за очень расплывчатый вопрос …
РЕДАКТИРОВАТЬ:
С помощью @mario, чтобы лучше понять весь этот беспорядок, в основном я должен был написать в q3:
if ($info == 'edsi.pem') {
$info = __FILE__;
return $info;
}
плюс добавить аргумент для q3
(q3($info)
) и добавить ?admin=true
в шапке …
Большое спасибо еще раз!
Прежде всего, я понимаю, что делает $ GLOBALS, но зачем присваивать $$ k для $ v (поэтому значение $ k равно значению $ v)? И $ GLOBALS получает значения внутри функций?
Что это foreach … $$k = $v;
сниппет в основном extract($GLOBALS);
Это не очень полезный способ передачи аргументов. Использование глобальных переменных имеет смысл, только если они имеют несколько описательных имен, и если они не используются как флаги состояния между различными разделами кода.
И нет, глобальные функции доступны не во всех функциях сразу. Следить за публикациями переменная область.
Как я могу установить $ admin = true? Я верю через q3 (), но я не вижу, как …
Вы путаете имена функций здесь (именно потому, что они не являются достаточно полезными именами функций для начала). Вы можете передать параметр $ admin при вызове a3()
вместо:
a3(true);
Больше всего меня смущает следующее: $ file = q3 («edsi.pem»). Так как моя функция q3 не имеет аргументов, и я не должен ее добавлять, как я могу ее использовать ?!
Единственный способ получить аргумент в q3
за func_get_arg()
.
И снова действительно, если это не упражнение о том, как не для написания кода или учебника о странных случаях использования вам не стоит беспокоиться дальше.
Других решений пока нет …