2009-07-31 9 views
0

Wie verwenden Sie in PHP eine externe $ var für die Verwendung innerhalb einer Funktion in einer Klasse? Zum Beispiel, sagen $ some_external_var Sätze wahr, und Sie haben so etwas wie

 
class myclass { 
bla .... 
bla .... 

function myfunction() { 

    if (isset($some_external_var)) do something ... 

    } 

} 


$some_external_var =true; 

$obj = new myclass(); 
$obj->myfunction(); 

Dank

+0

danke allen, es ist kein klassenabhängiges $ var und es wird selten in nur einem Bereich verwendet. Im Grunde wird diese Variable verwendet, um eine andere Datei für die Funktionsausgabe zu enthalten. – gus

Antwort

3

Global $some_external_var;

 
function myfunction() { 
    Global $some_external_var; 
    if (!empty($some_external_var)) do something ... 

    } 

} 

Aber weil Globale es stellt automatisch, ob es nicht leer ist.

+0

Danke Chacha102. – gus

3

das ist schlechte Software-Design. Damit eine Klasse funktioniert, muss sie mit Daten versorgt werden. Übergeben Sie diese externe Variable an Ihre Klasse, andernfalls erstellen Sie unnötige Abhängigkeiten.

2

Warum übergeben Sie diese Variable nicht einfach während __construct() und machen das, was das Objekt während der Konstruktion macht, abhängig vom Wahrheitswert dieser Variablen?

+0

In neueren Versionen von PHP brauchen Sie nicht einmal __construct() - Sie können eine Funktion mit dem Namen der Klasse erstellen und es verhält sich wie der Konstruktor. Zum Beispiel, sagen Sie haben Sie eine Klasse namens TestClass Klasse TestClass { private x; Funktion TestClass (y) { this-> x = y; } } Dies wäre ein gültiger Konstruktor. Aber ich stimme zu ... Ich würde es in den Konstruktor übergeben. –

+1

Joe Morgan, ich bin mir ziemlich sicher, dass es ältere Versionen waren, die die __construct Magic-Methode nicht unterstützten, und ** ** den Konstruktor benötigten, um den Klassennamen zu teilen. – eyelidlessness

+0

Argh, dumme gebrochene Halb-Markdown.Das war die "__construct" magische Methode. – eyelidlessness

5

Sie müssen das Schlüsselwort global in Ihrer Funktion verwenden, um Ihre externe Variable für diese Funktion sichtbar zu machen.

Zum Beispiel:

$my_var_2 = 'glop'; 

function test_2() 
{ 
    global $my_var_2; 
    var_dump($my_var_2); // string 'glop' (length=4) 
} 

test_2(); 

Sie könnten auch die Verwendung $GLOBALS Array, die immer sichtbar ist, auch innerhalb von Funktionen.


Aber es wird allgemein nicht als eine gute Methode angesehen, globale Variablen zu verwenden: Ihre Klassen sollten nicht von irgendwelchen externen Dingen abhängen, die da sein könnten oder nicht!

Eine bessere Möglichkeit wäre es, die Variablen übergeben Sie als Parameter benötigen, entweder auf die Methoden selbst oder an den Konstruktor der Klasse ...

0

Verwenden Getter und Setter oder vielleicht eine zentralisierte Konfiguration wie:

function config() 
{ 
    static $data; 

    if(!isset($data)) 
    { 
    $data = new stdClass(); 
    } 

    return $data; 
} 

class myClass 
{ 
    public function myFunction() 
    { 
     echo "config()->myConfigVar: " . config()->myConfigVar; 
    } 
} 

und die Verwendung es:

config()->myConfigVar = "Hello world"; 

$myClass = new myClass(); 
$myClass->myFunction(); 

http://www.evanbot.com/article/universally-accessible-data-php/24