it-swarm.com.de

Globale Variable, nur innerhalb des Moduls sichtbar

Ich habe mehrere Module, die sehr enge Funktionen implementieren. Und die SQL-Anforderungen sind bis auf den Tabellennamen fast identisch. Deshalb wollte ich in jedem Modul eine globale Variable erstellen:

$GLOBALS['module_name'] = __FILE__;
$regexp = "/.*" . "\\" . DIRECTORY_SEPARATOR. '(.*)\.module/';
$GLOBALS['module_name'] = preg_replace($regexp, '$1', $GLOBALS['module_name']);

$ GLOBALS ['Modulname'] enthält den aktuellen Dateinamen, der dem Namen der Tabelle entspricht.

Und dann verwenden Sie es in den Anfragen:

$query = db_select($GLOBALS['module_name']);

Globale Variablen werden jedoch von den Modulen gemeinsam genutzt, und die Definition eines anderen Moduls schreibt den korrekten Wert neu.

Ich habe versucht, hook_init zu verwenden

function my_module_init()
{
   $GLOBALS['module_name'] = __FILE__;
   $regexp = "/.*" . "\\" . DIRECTORY_SEPARATOR. '(.*)\.module/';
   $GLOBALS['module_name'] = preg_replace($regexp, '$1', $GLOBALS['module_name']);
}

Aber ohne Erfolg.

Ist es möglich, in vielen Modulen globale Variablen mit demselben Namen zu haben, die jedoch nur innerhalb des entsprechenden Moduls sichtbar sind?

5
user4035

Wenn Sie dieselbe globale Variable verwenden, wird ihr Wert von allen aktivierten Modulen gemeinsam genutzt, da globale Variablen per Definition global sind. Jede PHP Datei, die geladen wird, sieht die gleichen globalen Variablen, wie die globale $user, Die von Drupal für das Konto von verwendet wird) der aktuell angemeldete Benutzer.

Gleiches gilt, wenn Sie Konstanten verwenden, die mit define() definiert sind. Sie sind global und zwei Module können nicht dieselben Konstanten definieren. Versuchen Sie, REQUEST_TIME In Drupal 7, mit define('REQUEST_TIME, 'test') zu definieren: Sie erhalten eine Fehlermeldung, da dieselbe Konstante bereits aus Drupal (siehe REQUEST_TIME ).

Gleiches gilt für Drupal Variablen definiert mit variable_set () . Jedes Modul, das variable_set($name, $value) verwendet (wobei $name Hat Der gleiche Wert für alle Module setzt dieselbe Variable.

Selbst wenn Sie & drupal_static ($ name, $ value) in verschiedenen Modulen verwenden würden, ändern die Module dieselbe statische Variable.

Ich würde lieber eine Konstante verwenden, die mit define() definiert ist, aber jedes Modul muss eine andere Konstante verwenden.
Siehe Drupal-Codierungsstandards about Namenskonventionen .

4
kiamlaluno

warum benutzt du nicht variable? variables ist eine gute Funktion in drupal und das Arbeiten mit ihnen ist sicher und einfach.

variable_set ('Modulname', [~ # ~] Datei [~ # ~] ); variable_set Doc

und diese Variablen bieten überall, wo Sie wollen, nur um sie zu bekommen

variable_get ($ name, $ default = NULL);

variable_get Doc

Ich schlage vor, Sie verwenden variabled anstelle globaler Variablen.

0
Yusef