Definition von global nicht voranstellen

Superior8881

Grünschnabel
Hallo,

gibt es die Möglichkeit, dass ich mir das globalisieren meiner Variable in einer extra Zeile ersparen kann?

Original:
PHP:
function check($x, $y) {
  global $base;

  return $base->select("SELECT id FROM blablabla WHERE x = $x AND y = $y");
}

Irgendwie so:
PHP:
return global $base->select("SELECT id FROM blablabla WHERE x = $x AND y = $y");
return global($base)->select("SELECT id FROM blablabla WHERE x = $x AND y = $y");
return (global($base))->select("SELECT id FROM blablabla WHERE x = $x AND y = $y");


Gruß und Danke für Eure Antworten

Markus
 

Zvoni

Erfahrenes Mitglied
Wozu? Nur um eine Zeile code zu sparen?

Bin kein PHP-ler, aber globale Variablen sind eh ein grosses "Pfui bähhh" und sind zu vermeiden.
Was mich in dem Fall jetzt eh überrascht, dass man anscheinend in PHP eine globale Variable innerhalb einer Funktion deklarieren kann? Fröhliches debugging wünsche ich dann....

Wieso übergibst du diese Variable/Objekt nicht als Referenz?
 

Yaslaw

n/a
Moderator
@Zvoni
Das global deklariert die Variable nicht global, sondern sagt der Funktion, dass sie aus dem globalen Raum nehmen soll
PHP:
$a = 1;

test1();
test2();

function test1(){
    global $a;
    echo $a;
}
function test2(){
    echo $a;    //-->Notice: Undefined variable: a in C:\xampp\htdocs\cclxxi\web\test.php on line 9
}

Zur Frage:
Nicht hübsch, gar nicht hübsch. WIe Zvoni schreibt. Globale Variabeln sind zu vermeiden.
Ansonsten kannst du auch über $GLOBALS zugreifen.
PHP:
$a = 1;
test3();
function test3(){
    echo $GLOBALS['a'];
}

Nachtrag
Das geht auch mit Klasseninstanzen
PHP:
$c =new C1();
test4();

function test4(){
    echo $GLOBALS['c']->test();
}

class C1{
    public function test(){return 123;}
}
 
Zuletzt bearbeitet:

Jan-Frederik Stieler

Monsterator
Moderator
Aber wirklich mach das nicht!

Wenn Du eine variable an eine Funktion übergeben willst mach das über einen Parameter. Du weißt doch nicht wie die Variable beim Aufruf heißt? Und du machst dadurch damit das Dein Code dynamisch wird, weshalb man ja Funktionen erzeugt, zunichte.
Da kannst Du dann auch wieder klassischen prozeduralen Code schreiben.

Versuche beim Programmieren den Scope (Gültigkeitsbereich) von Variablen immer so klein wie möglich zu halten.
Ansonsten weißt Du irgendwann nicht mehr wo diese herkommen oder wo Du diese verändert hast.
Ich mach auch schon gerne was dass man eigentlich nicht machen sollte, und zwar Variablen mit sich selbst zu überschreiben. Ich mach das weil ich immer zu faul bin mir neue Variablennamen auszudenken.
Aber auch ich bin dabei schon ins straucheln geraten, gerade beim debugging wenn man sich einen alten Code anschaut sitzt man gerne wie der Hase vor der Schlange.

Grüße