php - доступ к переменным внутри функции, определенной в другой функции?

Я пытаюсь получить переменные, которые я определил в функции из другой функции, которую я вызвал в этой функции, например:

$thevar = 'undefined';
Blablahblah();
echo $thevar; (should echo blaaah)
function Blahedit(){

     echo $thevar; (should echo blah)
     $thevar = 'blaaah';

}
function Blablahblah(){

     global $thevar;
     $thevar = 'blah';
     Blahedit();

}

Я хочу знать, есть ли другой способ сделать это без передачи параметров в Blahedit(), get_defined_vars дает мне переменные внутри функции, а не $thevar... и вызов global $thevar просто выдаст мне предыдущую неотредактированную версию.

Пожалуйста помоги):

3 ответа

Просто глобальный $thevar внутри blahedit.

function Blahedit(){
    global $thevar;
    echo $thevar; //(should echo blah)
    $thevar = 'blaaah';

}

Вы можете передать переменные в качестве ссылочного параметра (как показано ниже), инкапсулировать свой код в классе и использовать свою переменную в качестве атрибута класса или позволить функциям возвращать измененную переменную.

$thevar = 'undefined';
Blablahblah($thevar);
echo $thevar; 

function Blahedit(&$thevar){
     echo $thevar;
     $thevar = 'blaaah';
}

function Blablahblah(&$thevar){
     $thevar = 'blah';
     Blahedit($thevar);
}

Использование глобалов внутри функций считается плохой практикой. Однако передача большого количества переменных по ссылке также не является хорошим стилем.

Если вы хотите, чтобы ваш код работал так, как он есть, вы должны добавить global $thevar к вашей функции редактирования:

function Blahedit(){
     global $thevar;
     echo $thevar; (should echo blah)
     $thevar = 'blaaah';
}

Вы можете использовать это: http://php.net/manual/en/reserved.variables.globals.php

или лучше взглянуть на опа

http://php.net/manual/en/language.oop5.php http://php.net/manual/en/language.oop5.basic.php

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