• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Neue Superglobale Variable erstellen ohne $GLOBALS und global

flashspys

Mitglied
Ich möchte folgendes realisieren:

Ich möchte in jeder Datei meines Programms immer auf den aktuellen User zugreifen können. Dazu bräuchte ich eine Variable $User. Diese muss ich aber in jeder Methode die ich erstelle jedesmal mit global $User aufs neue ankündigen, was doch iwie den Sinn verfehlt...

$GLOBALS["user"] möchte ich aus Gründen der übersichtlichkeit nicht verwenden. Am liebsten wäre mir eine Variable (z.b. $_USER) die, wie globals immer und überall global ist.

Mein Ansatz:
PHP:
$GLOBALS["user"] = "hay";
$_USER = &$GLOBALS["user"];
echo $_USER;
function a(){
    var_dump( $_USER);
}
a();
kommt aber leider auch NULL zurück :(

hat jemand eine Idee?? kann man das vllt iwo in die ini schreiben?
 
Hallo,

um eine Ressource global zugänglich zu machen, gibt es einige Möglichkeiten. Eine superglobale Variable neu zu definieren ist aber nicht machbar.

Eine weitere Idee wäre eine User-Klasse mir statischen Attributen.

PHP:
class User{
    public static $name = 'username123';
}

function foo(){
    echo User::$name;
}
 
@TE: Du beschreibst ein "Problem", für welches ein bestimmtes Design-Pattern existiert.

Über das Registry-Design-Pattern lassen sich Daten (Objekte, Strings, Arrays, Integers) speichern und an jeder beliebigen Stelle wieder abrufen. Dafür Notwendig ist eine Klasse:

PHP:
<?php
class Registry {
    private $datas = array();
    
    public static function set($name, $value) {
        $this->datas[$name] = $value;
    }
    
    public static function get($name) {
        if (isset($this->datas[$name])) {
            return $this->datas[$name];
        }
    }
}

Diese Klasse speicherst Du nun zB als class.Registry.php ab. In jeder Datei, in welcher Du nun Daten in mehreren Funktionen benötigst, bindest Du diese Datei ein bzw. wenn bei dir, jeder Request über eine zentrale Bootstrap Datei läuft, dann bindest Du dort diese Klasse ein.

Ein Beispiel wie du Sie verwendest:
PHP:
<?php
require_once 'class.Registry.php';

Registry::set('foo', 'Baaaaaaar');
Registry::set('bar', 'Foooooooo');
Registry::set('int', 5);


function registryTest() {
    echo Registry::get('foo');
    echo Registry::get('bar');
    echo Registry::get('int');
}

registryTest();
 
Zurück
Oben