Globale Variable oder Klassenvariable

CookieBuster

Erfahrenes Mitglied
Für meine Loginklasse möchte ich ein ConfigArray haben (hab ich auch ;))

Jetzt wäre da interessant die beiden oben genannten Varianten gegeneinander abzuwägen.


Globale Variante Beispiel:

PHP:
$Config = array();
$Config['user'] = 'user';
$Config['pass'] = 'pass';
// ...

class Login {
    function __construct() {
        global $Config;
        $this->Config = $Config;
    }
}


oder das ganze als Klassenvariablen, Variante 1)

PHP:
class Login {
    private $User = "";
    private $Pass = "";
    // ...
}

Variante 2) ist das selbe wie Variante 1), nur dass hier ebenfalls ein Array benutzt wird, wie im obersten Beispiel.

Wie würdet ihr es machen, wenn man bedenkt dass es doch einige Konfigurationsvariablen geben wird?

Zu dem Array in der Klasse noch, wie kann ich das außerhalb der Initialisation mit $Var = array(); füllen? (außerhalb von Funktionen wenn möglich)
 
Zuletzt bearbeitet:
Meiner Meinung nach am schönsten:

PHP:
$Config = array();
$Config['user'] = 'user';
$Config['pass'] = 'pass';
// ...

class Login {
    function __construct($Config) {
        $this->Config = $Config;
    }
}
 
PHP:
class Login
{
  function __construct($user, $pass)
  {
    $this->user = $user;
    $this->pass = $pass;
  }
}

Viel angenehmer für alle Programmierer. Ansonsten würde ich diese Sachen als private Klassenvariable deklarieren.
 
@Felix: Daran habe ich auch gedacht, nur zu spät, da wars schon geschrieben :D. Hat man nicht das Problem mit Variablenbenennung und so.
Ich finds nur insoweit etwas unschön, als dass man den gesamten Trümmer von einem Array irgentwo anderst hinschreibt, womöglich in eine eigene Datei, und die Klasse ganz ohne die Daten dasteht. Man muss immer nachschauen. (Ja man kanns ja auch gleich über die Klasse schreiben, find ich aber ebenfalls nicht erstrebenswert, da imho eine Klasse eine eigene Datei verdient)

@Zodiac: Ich denke nicht, dass ein Konstuktor mit über 20 Parametern einem Programmierer spaß macht ;). Vorallem dann nicht, wenn man gerade keine Docu zur Hand hat, wo erklärt ist, welcher Para welcher ist.

Mit Private spielst du wahrscheinlich darauf an, einfach die Variablen HardCoded in die Klasse oben einzufügen?
Dann muss jeder der die Klasse verwenden will, in die Datei und jede Variable anpassen. Sprich Theoretisch ja nichts dagegen, nur für manche "Spezialisten" von Nutzer etwas arg *g*

Die Variante von Felix dürfte meinem Wunschziel wohl sehr nahe kommen. Wäre aber trotzdem glücklich über andere Meinungen, auch wenn kein neuer Vorschlag eingebracht wird
 
Okay, dann noch eine Variante...

Registry Pattern

Einfach nur als Intention, hab leider grade wenig Zeit, sonst hätte ich dir da mehr hingeworfen...

Ist natürlich auch keine elegante Lösung, da man den globalen Variablenraum sozusagen nur verlegt, aber es ist übersichtlicher ;)
 
@Zodiac: Ich denke nicht, dass ein Konstuktor mit über 20 Parametern einem Programmierer spaß macht ;). Vorallem dann nicht, wenn man gerade keine Docu zur Hand hat, wo erklärt ist, welcher Para welcher ist.

Ach so. Dachte es seien nur die zwei. Dann wäre ich auch Richtung Felix gegangen. Allerdings leicht abgewandelt vom Registry-Pattern um deine Eingangsidee beizubehalten:
PHP:
$default = array(
  "user" => "foo",
  "pass" => "bar"
  "admin" => false
);

class Login
{

  private $settings = array();  // Je nach Geschmack auch public oder protected

  function __construct($settings = NULL)
  {
    global $default;
    $this->settings = $default;

    if ($settings !== NULL && is_array($settings))
    {
      $this->settings = array_merge($this->settings, $settings);  // geht auch sicherer, aber zeitaufwendiger
    }
  }
}

// Standard-Benutzer
$dummy = new Login();

// Nutzer ohne Admin-Rechte
$someone = new Login(array(
                           'user' => 'Du',
                           'pass' => 'Deins'
                    ));

// Admin-Dummy
$any_admin = new Login(array('admin' => true));

Ganz komische Formatierung aber egal.

Eliminiert man die überflüssigen Zeilen, so sieht man das Array mit Inhalt ebenfalls in der Klasse wieder. Nun kann der Konstruktor es aber ändern ;)
 
Zuletzt bearbeitet:
Zurück