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 дает мне vars внутри функции, а не $thevar... и вызов global $thevar просто даст мне предыдущую неотредактированную версию.

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


person Xansy    schedule 29.12.2012    source источник
comment
Вы уже сделали это в последней функции, просто добавьте global $thevar; к первой функции.   -  person AlecTMH    schedule 29.12.2012
comment
Почему?! Зачем вам это? У меня просто глаза горят от одного взгляда!   -  person Madara's Ghost    schedule 29.12.2012
comment
Глобальные переменные - очень плохая идея. Почему бы не использовать параметры? Проще и безопаснее   -  person Ed Heal    schedule 29.12.2012
comment
глобальный $тевар; дает мне $thevar = 'undefined'...   -  person Xansy    schedule 29.12.2012
comment
Я просто хочу знать, есть ли другой способ действовать, и да, это проще, спасибо Эду и Мадаре за то, что они единственные двое, которые действительно читают то, что я сказал ♥   -  person Xansy    schedule 29.12.2012
comment
Другая вещь, которую я могу сделать, это использовать класс obj (который находится в моем фактическом коде), определить там переменные, назначить их var и передать это обратно, но это беспорядок и было бы глупо, учитывая тот факт, что я просто использую эти переменные для 1 функции.   -  person Xansy    schedule 29.12.2012
comment
@ user1936522 - Почему это глупо? OOD не пропустит здесь, так как сделает ваш код масштабируемым.   -  person Ed Heal    schedule 29.12.2012


Ответы (3)


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

или лучше посмотрите на oop

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

person GreenRover    schedule 29.12.2012

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

$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';
}
person David Müller    schedule 29.12.2012
comment
Я уже знаю, что это возможно через параметры, я хочу знать, есть ли другой способ, не делая этого. - person Xansy; 29.12.2012

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

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

}
person Menztrual    schedule 29.12.2012
comment
Глобальные вызовы на старый $thevar (неопределенный), и я хочу, чтобы отредактированная версия была передана блаблахбла - person Xansy; 29.12.2012