2011-01-13 16 views
4

I haben:PHP: Unter Verwendung einer Variablen, die innerhalb einer Funktion sind

include ('functions.php'); 
check_blocked(); 
echo $blocked; 

in functions.php, check_blocked(); existiert. Innerhalb check_blocked Ich habe:

global $blocked; 
$blocked = '1234'; 

I $ blockiert Variable Echo wollen, die innerhalb check_blocked werden().

Es funktioniert nicht, keine Ausgabe ..

Dies ist ein Beispiel von meinem ursprünglichen Problem, nicht so bitte sagen, dass ich nur das Echo innerhalb der Funktion haben könnte, da ich nicht in meinem ursprünglichen Code haben kann.

+0

Versuchen Sie stattdessen, ['$ GLOBALS'] (http://www.php.net/manual/en/reserved.variables.globals.php) und sehen, ob das hilft. –

+4

Warum ermutigen Sie alle ihn, Globals zu verwenden, wenn er nur den Wert von der Funktion zurückgeben sollte? – dqhendricks

+2

Rückgabe $ blockiert? Also funktioniert 'echo check_blocked()' eigentlich? Wenn mehrere $ blockiert sind, verwenden Sie Arrays. Wo ist das Problem? – Shoe

Antwort

4

sollte Ihr Code aussehen

$blocked = 0; 
include('functions.php'); 
check_blocked(); 
echo $blocked; 

Mit functions.php wie

function check_blocked(){ 
    global $blocked; 
    $blocked = 1234; 
} 

suchen Sie müssen, bevor Sie in die Funktion blockiert globalen außerhalb des Bereichs der Funktion blockiert definieren.

+0

echo $ blocked wird 0 und nicht 1234 ... – Shoe

+0

+1 ausgeben. Tatsächlich.Sonst macht das 'global $ blocked' in der Funktion nichts; Es findet keinen globalen Namen "$ blocked", weil Sie noch keinen erstellt haben! –

+1

@Tomalak Geret'kal upvoting die Verwendung von Globalen? Warum gibst du nicht einfach den Wert von der Funktion zurück? – dqhendricks

0

Wenn die Variable nicht außerhalb der Funktion check_blocked() deklariert ist, können Sie dies nicht tun.

$foo = null; 

function check_blocked() { 
    global $foo; 
    $foo = "Hello"; 
    // do some stuff 
} 

global $foo; 
echo $foo; // prints "Hello" 

Wenn seine Innenseite der Funktion definiert wie:

function check_blocked() { 
    global $foo; 
    $foo = "Hello"; 
    // other work 
} 


global $foo; 
echo $foo; // Nothing 

dann wird die Variable lokal scoped, und wird, sobald die Funktion beendet verworfen.

+0

-1. Sie haben das Schlüsselwort 'global' vergessen. –

+0

Ja ... mmm. dann? – Shoe

+0

Argh, du hast Recht. – minichate

0

können Sie check_blocked() ändern $blocked oder Sie versuchen, verwenden können zurückkehren:

include ('functions.php'); 
check_blocked(); 
global $blocked; 
echo $blocked; 
+1

-1. Eh? Das ist bereits global. Warum schreiben Sie "global" da? Was für ein Unsinn. –

0

stattdessen verwenden, um einen Rückgabewert. Globals sind schlecht.

include ('functions.php'); 
echo check_blocked(); 

function check_blocked() { 
    return '1234'; 
} 
+0

Obwohl ein gültiger Weg, Dinge zu tun, drängt nicht den Punkt der Variablen Umfang und wie man tatsächlich eine globale Variable verwenden. –

+0

@Geoffrey Wagner fragt er eigentlich gar nichts über globals oder scope ... die OPs Frage war, wie man eine Variable, die innerhalb einer Funktion erstellt wurde, nach der Ausführung der Funktion wiedergibt. Warum nicht ihnen helfen, die beste Methode zu verstehen? – dqhendricks

+0

Ich sehe Ihren Punkt vollständig und ich bin nicht abwertend, aber warum zeigen Sie ihnen nicht die Fehler ihrer Wege, anstatt zu sagen, tun Sie es einfach so ?? Bringen Sie einem Mann bei, zu fischen und ihn für immer zu füttern IMO –

4

Warum nicht einfach den Wert zurückgeben?

function check_blocked() { 
    $blocked = '1234'; 
    return $blocked; 
} 

dann

include ('functions.php'); 
echo check_blocked(); 

Vermeiden Globales wo immer möglich.

+1

+1. Globale sollten vermieden werden. Dies ist der richtige Weg, es zu tun. – mfonda

+0

@mfonda Es gibt keinen einzigen "richtigen" Weg, etwas zu tun, und weitreichende Verallgemeinerungen helfen nicht. –

+0

Wir wissen nicht genug über das reale Szenario hinter seinem Testfall. Dies kann in der Tat nicht angemessen sein; Ich habe das Gefühl, dass Sie zu weit vom ursprünglichen Testfall abgewichen sind. Kein Downvote, obwohl. –

Verwandte Themen