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; дава ми $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
Global извиква стария $thevar (недефиниран) и искам редактираната версия да бъде предадена от blablahblah - person Xansy; 29.12.2012