Как я могу получить доступ к переменной в функции, которая определена в другой функции?
Например:
<?php
function a() {
$fruit = "apple";
function b(){
$country = "USA";
// How can I here access to $fruit
}
// And how can I here access to $country
}
?>
или вы можете вызвать функцию внутри функции: - eval.in/1055852
@MagnusEriksson, да, другого способа сделать это нет?
Конечно. Есть множество творческих способов сделать это, но вопрос в том, почему?
вы можете вызвать метод b ($ fruit), передать плод в этом методе или объявить эту переменную глобально для доступа к значению. Это нехорошо, вам нужно создать другую функцию вне функции a ().
объявить его глобально, чтобы любые функции могли получить к нему доступ и максимально использовать ООП
@MagnusEriksson ну на самом деле я пишу рекурсивную функцию (b) внутри другой функции (a), и мне нужно получить доступ к трем постоянным переменным в функции b. Я просто хотел получить доступ к этим переменным напрямую, не передавая их каждый раз.
@Mehdi, почему же не обязательно, чтобы эти константы определялись в этой области видимости функции? Просто объявите эти константы глобально
@ mr. избегайте использования a ($ g, $ s) и $ count = count ($ s). поэтому здесь переменные, которые не изменяются, - это $ g, $ count. и я должен передать их другой функции, которая является рекурсивной. если я напишу это в oop, то у меня не будет проблем.
Если вы знаете, как заставить его работать с помощью ООП, почему бы тогда этого не сделать? Похоже, вы пытаетесь усложнить себе жизнь без (нам известной) причины? Я также не понимаю, зачем вам нужно объявлять функцию в функции.
@MagnusEriksson да, я думаю, я усложняю задачу ... и о том, почему я объявляю функцию внутри другой, я просто хотел использовать переменные напрямую, иначе я бы объявил вторую вне первой функции. программа, которую я пытаюсь написать, - это задача guitar_subset в sololearn. Кстати, спасибо за вашу помощь и терпение.
Вы можете использовать глобальное слово. Попробуйте и скажите, работает ли.
<?php
function a() {
$fruit = "apple";
$country=b();
// And how can I here access to $country
}
function b(){
global $fruit;
$country = "USA";
// How can I here access to $fruit
return $country;
}
?>
, но ты должен сделать так
<?php
function a() {
$fruit = "apple";
$country=b($fruit);
// And how can I here access to $country
}
function b($fruit){
$country = "USA";
// How can I here access to $fruit
return $country;
}
?>
Использование global
- не лучшая практика. Также $country
по-прежнему недоступен в функции a
.
почему вы определяете функции внутри функций: D делайте это так: D
То, что вы делаете, - довольно плохая практика, потому что функции PHP не могут быть вложены таким образом, как javascript. В вашем примере a
и b
являются просто глобальными функциями, и вы получите сообщение об ошибке, если попытаетесь вызвать a
дважды.
Я подозреваю, что вам нужен такой синтаксис:
function a() {
$fruit = "apple";
$country = null;
$b = function() use ($fruit, &$country) {
$country = "USA";
// How can I here access to $fruit
};
// And how can I here access to $country
}
Конечно, вам нужно будет вызвать $b()
внутри $a()
.
Вы можете передать
$fruit
в качестве аргумента вашей функцииb()
. Затем вы возвращаете$country
из своей функцииb()
и используете ответ.