Объем переменной php в функциях?

Как я могу получить доступ к переменной в функции, которая определена в другой функции?

Например:

<?php
    function a() {
        $fruit = "apple";

        function b(){
            $country="USA";
            // How can I here access to $fruit
        }

        // And how can I here access to $country  
    }
?>

Вы можете передать $fruit в качестве аргумента вашей функции b(). Затем вы возвращаете $country из своей функции b() и используете ответ.

Magnus Eriksson 10.09.2018 10:16

или вы можете вызвать функцию внутри функции: - eval.in/1055852

Anant Kumar Singh 10.09.2018 10:18

@MagnusEriksson, да, другого способа сделать это нет?

Mehdi 10.09.2018 10:19

Конечно. Есть множество творческих способов сделать это, но вопрос в том, почему?

Magnus Eriksson 10.09.2018 10:21

вы можете вызвать метод b ($ fruit), передать плод в этом методе или объявить эту переменную глобально для доступа к значению. Это нехорошо, вам нужно создать другую функцию вне функции a ().

Vishal Sharma 10.09.2018 10:25

объявить его глобально, чтобы любые функции могли получить к нему доступ и максимально использовать ООП

Beginner 10.09.2018 10:26

@MagnusEriksson ну на самом деле я пишу рекурсивную функцию (b) внутри другой функции (a), и мне нужно получить доступ к трем постоянным переменным в функции b. Я просто хотел получить доступ к этим переменным напрямую, не передавая их каждый раз.

Mehdi 10.09.2018 10:27

@Mehdi, почему же не обязательно, чтобы эти константы определялись в этой области видимости функции? Просто объявите эти константы глобально

enno.void 10.09.2018 10:29

@ mr. избегайте использования a ($ g, $ s) и $ count = count ($ s). поэтому здесь переменные, которые не изменяются, - это $ g, $ count. и я должен передать их другой функции, которая является рекурсивной. если я напишу это в oop, то у меня не будет проблем.

Mehdi 10.09.2018 10:41

Если вы знаете, как заставить его работать с помощью ООП, почему бы тогда этого не сделать? Похоже, вы пытаетесь усложнить себе жизнь без (нам известной) причины? Я также не понимаю, зачем вам нужно объявлять функцию в функции.

Magnus Eriksson 10.09.2018 10:48

@MagnusEriksson да, я думаю, я усложняю задачу ... и о том, почему я объявляю функцию внутри другой, я просто хотел использовать переменные напрямую, иначе я бы объявил вторую вне первой функции. программа, которую я пытаюсь написать, - это задача guitar_subset в sololearn. Кстати, спасибо за вашу помощь и терпение.

Mehdi 10.09.2018 11:16
0
11
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать глобальное слово. Попробуйте и скажите, работает ли.

<?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.

DarkBee 10.09.2018 10:42

почему вы определяете функции внутри функций: D делайте это так: D

Matas Lesinskas 10.09.2018 10:45

То, что вы делаете, - довольно плохая практика, потому что функции 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().

Другие вопросы по теме