Gültigkeitsbereich von Variablen

HeinerK

Erfahrenes Mitglied
In meinem Script stehen eine Reihe Variablen, die ich in einer verwendeten Klasse benutzen möchte. Jedoch komme ich an die Variablen nicht 'dran. Irgendwie hängen die noch zu hoch...

PHP:
<?php
$benutzer = 'meier';
$passwort = 'elfriede';
 
class Db {
  public function __construct() {
   echo "Benutzer: $benutzer <br />";
   echo "Passwort: $passwort <br />";
  }
}
$Db = new Db();
?>


Die Ausgabe könnt ihr euch vorstellen: Für $benutzer und $passwort wird leider nichts eingesetzt.

(Nein, meine DB-Klasse gibt normalerweise nicht die Zugangsdaten aus ;-))

Probiert habe ich schon Folgendes, was aber beides nicht zum Erfolg führt:

PHP:
<?php
$benutzer = 'meier';
$passwort = 'elfriede';
 
class Db {
  public function __construct() {
   global $benutzer;
   global $passwort;
   echo "Benutzer: $benutzer <br />";
   echo "Passwort: $passwort <br />";
  }
}
$Db = new Db();
?>

und

PHP:
<?php
$benutzer = 'meier';
$passwort = 'elfriede';
 
class Db {
  public function __construct() {
   $benutzer = $GLOBALS['benutzer'];
   $passwort = $GLOBALS['passwort'];
   echo "Benutzer: $benutzer <br />";
   echo "Passwort: $passwort <br />";
  }
}
$Db = new Db();
?>
 
Zuletzt bearbeitet:
Das 2. und 3. Beispiel koennen nicht funktionieren da allein schon $name nicht $benutzer ist.
Weiterhin heisst der Konstruktor nicht __contruct() sondern __construct(), daher wird Deine Funktion nie ausgefuehrt.

Und anstatt mit global zu arbeiten solltest Du die Variablen besser dem Konstruktor uebergeben.
 
Das 2. und 3. Beispiel koennen nicht funktionieren da allein schon $name nicht $benutzer ist.
Weiterhin heisst der Konstruktor nicht __contruct() sondern __construct(), daher wird Deine Funktion nie ausgefuehrt.

Behoben. Das stand aber so nicht im Programm, sondern nur in der abstrahierten Version die ich schnell für's Forum zusammengetippt habe und ist nicht ursächlich für mein Problem.

Und anstatt mit global zu arbeiten solltest Du die Variablen besser dem Konstruktor uebergeben.

Das sind zu viele. Dafür bin ich zu bequem.

Ursprünglich hatte ich die Zugangsdaten als Konstanten definiert. Das hat prima funktioniert, ich musste nur davon abweichen, weil ich die Konstanten zwischendurch wieder überschreiben musste. Wie kann ich denn bewirken, dass die Variablen die gleiche Globalität bekommen, wie meine anfänglichen Konstanten?
 
PHP:
<?php
$benutzer = 'meier';
$passwort = 'elfriede';
 
class Db {
  public function __construct($user,$pass) {
   echo "Benutzer: $user <br />";
   echo "Passwort: $pass <br />";
  }
}
$Db = new Db($benutzer,$passwort);
?>
 
Nagut, ihr habt mich überzeugt. Jetzt ist's zwar ein recht langer Aufruf mit vielen Parametern aber eigetlich macht das nichts. Solange es läuft... und das tut es nun.

Danke.

Thread kann geschlossen werden.
 
Nagut, ihr habt mich überzeugt. Jetzt ist's zwar ein recht langer Aufruf mit vielen Parametern aber eigetlich macht das nichts. Solange es läuft... und das tut es nun.
Du solltest mal ein paar meiner Aufrufe sehen. ;)
Uebrigens, Du kannst auch Parameter optional gestalten indem Du sie vorbelegst.
PHP:
function blabla($a,$b,$c='',$d='')
{
 //mach was
}
Diese Funktion erwartet mindestens 2 und maximal 4 Parameter.
Dies kann z.B. genutzt werden um Standardwerte (z.B. Portnummern) festzulegen, die aber bei Bedarf auch geaendert werden koennen.

Nicht zu danken.

Thread kann geschlossen werden.
Nee, das wird er hier nicht. Denn es kann ja mal sein, dass es zu Deinem Problem noch Folgefragen gibt. Aber Du kannst, und solltest, den Thread als erledigt markieren. Dies kannst Du ueber den Button mit der Aufschrift "Erledigt" bewerkstelligen.
 
Zurück