2009-06-23 8 views
0

Ich habe bestimmte PHP-Klasse-Methoden, die auf externe Variablen zugreifen. Diese Variablen werden nicht als Argumente übergeben, sondern direkt vom Code in den Methoden verwendet.Sollte der Klassenmethodencode direkt auf externe Variablen zugreifen?

Eine Methode verwendet eine Variable, die in einer Konfigurationsdatei DEFINIERT ist und deren Zweck es ist, für jeden Teil der App verfügbar zu sein, der sie benötigt. Das scheint mir ok zu sein.

Die andere Methode greift direkt auf ein $ _GET var zu. Es gibt Code, der den Fall behandelt, wo diese Variable nicht gesetzt ist, aber irgendwie riecht das nach mir.

Sind diese beiden Fälle etwas, was ich tun sollte oder sollte ich eine strenge Pass-als-Argument-Konvention haben?

Antwort

1

Da Sie bereits mit PHP-Klassen arbeiten und die Möglichkeit haben, die Architektur zu ändern, sollten Sie versuchen, sie so gut wie möglich von externen Variablen zu entkoppeln. Wenn Sie es rückwärts kompatibel machen müssen, können Sie auch Standardvariablen festlegen.

class Bla 
{ 
    public function blaBla($var = false) 
    { 
     if(!$var && isset($_GET)) 
      $var = $_GET; 
     // ... 
    } 
} 

$bla = new Bla(); 
$bla->blaBla(); 
$bla->blaBla($_GET); 

Ich mag auch nicht die define() -Methode (ich bevorzuge eine Singleton-Variable Registrierung wie die Zend Framework-Registrierung). Ein großes Problem ist, dass Sie die Definitionen nicht mehr ändern können. Das könnte gut sein oder nicht. Ich arbeitete an einer Software, bei der der define() Teil verschlüsselt war und es keine Möglichkeit gab dies zu ändern, obwohl sie "Hooks" im Quellcode hatten (aber Klassenmethoden benutzen die Defines anstatt sie als zu übergeben) ein Argument ... das ist sehr schlechte Architektur in meinen Augen).

1

Versuchen Sie, die (http) -Anforderung und die Konfigurationsdatei zu modellieren, und greifen Sie über die API dieser Modelle auf diese Variablen zu.

Verwandte Themen