Portal > Foren > PHP > PHP-Programmierung > dynamischer Zugriff auf statische Eigenschaft einer Klasse
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 15.11.2005, 13:05 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard dynamischer Zugriff auf statische Eigenschaft einer Klasse

Hallo,
irgendwie stehe ich gerade mal wieder auf dem Schlauch (passiert echt zu oft in letzter Zeit -).

Ich habe folgendes Problemchen.

Ich lasse mir eine Referenz auf ein Objekt vom Typ User zurückgeben, indem ich meinen UserManager verwende.
Das sieht so aus

PHP-Code:
$user UserManager::getUser(UserManager::$vB_USER); 
wobei $vB_USER eine statische Eigenschaft in der Klasse UserManager ist, über die ich die Klasse spezifiziere, die zur Erstellung der Instanz verwendet werden soll.

Das sieht z.B. so aus
PHP-Code:
        public static function getUser($userType) {

            if(
is_null(self::$user)) {
                
                switch(
$userType) {
                    case 
self::$IPB_User:
                        
self::$user = new IPB_User();
                        break;
                    
                    case 
self::$SMF_User:
                        
self::$user = new SMF_User();
                        break;
                        
                    case 
self::$vB_User:
                        
self::$user = new vB_User();
                        break;

                        case 
self::$YeBS_User:
                    default:
                        
self::$user = new YeBS_User();
                }
            }

            return 
self::$user;
        } 
So als Beispiel.

Jut. Jetzt setzt ich setze ich die Rechteverwaltung des CMS jeweils auf die Rechtverwaltung des jeweiligen Forums, sofern eines installiert ist. Sonst verwende ich mein eigenes Usermanagement.

Aus diesem Grund gibt es in der Tabelle settings einen Eintrag namens SYSTEM, welcher dann z.B. folgende Werte annehmen kann
Code:
IPB
SMF
vB
YeBS
..
Ok.

Nun möchte ich natürlich weiterhin die Möglichkeit haben dynamisch Objekte zu erstellen. Ich will nicht immer ins auto_prepend_file() gehen und diese Zeile hier
PHP-Code:
$user UserManager::getUser(UserManager::$vB_USER); 
ändern müssen, wenn ich eine andere Userverwaltung nutzen will.
Ich ändere einfach den Eintrag in der Datenbanktabelle settings und dann soll das automatisch laufen.

Das ist auch eigentlich kein Problem. Ich lese also mittels einer Konfigurationsklasse diesen Wert aus
PHP-Code:
$userClass $conf->getSettings('SYSTEM') . '_User'
Nur wie bringe ich das jetzt mit dem stastischen Aufruf zusammen?

Ich müsste ja jetzt Folgendes machen:
PHP-Code:
$userClass $conf->getSettings('SYSTEM') . '_User';
$user UserManager::getUser(UserManager::$userClass); 
aber das gibt natürlich folgende Meldung:
Code:
Access to undeclared static property: UserManager::$userClass in [...]
Frage ist also, wie kann ich einen statischen Zugriff realisieren, bei dem die Eigenschaft, auf die zugegriffen werden soll, dynamisch in Form einer Variablen vorliegt?

Ich danke im Voraus für eure Antworten.

Grüße Ben.

Das ist wahrscheinlich wieder total easy und ich komm nur nicht drauf ..
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 13:59 Nach oben    #2
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 965
Standard

Bin mir nicht sicher, ob das per Überladung geht, aber einen Versuch wäre es sicher wert.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 14:06 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard

Zitat:
Zitat von Lars
Bin mir nicht sicher, ob das per Überladung geht, aber einen Versuch wäre es sicher wert.
Damit meinst du jetzt was genau?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 14:09 Nach oben    #4
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 965
Standard

http://www.php.net/manual/de/languag...verloading.php
Überladung ist seit Version 5 möglich.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 14:21 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard

Zitat:
Zitat von Lars
http://www.php.net/manual/de/languag...verloading.php
Überladung ist seit Version 5 möglich.
Ich weiß schon was das Überladen von Methoden ist, aber es geht doch hier um einen statischen Aufruf ..
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 14:29 Nach oben    #6
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 965
Standard

PHP-Code:
function __set($name$value)
{
    
self::${$name} = $value;

__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 14:51 Nach oben    #7
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard

Sorry .. verstehe ich nicht.
Wie soll ich das denn da bitte einbauen?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 15:14 Nach oben    #8
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 965
Standard

Du ergänzt die Klasse, von der du die statische Eigenschaft ändern willst, mit der Funktion __set(). Jedesmal, wenn du einer Eigenschaft einen Wert zuweist, springt __set() an. ${$name} wird durch z. B. $blafu ersetzt und alles sollte klappen wie du es beabsichtigst.


// Edit:
Um normale von statischen Eigenschaften zu unterscheiden, könntest du bei statischen z. B. ein stc_ als Prefix vorhängen.
PHP-Code:
function __set($name$value)
{
    if ( 
substr(03$name) == 'stc_' )
    {
        
$name str_replace('stc_'''$name);
        
self::${$name} = $value;
    }
    else
    {
        
$this->{$name} = $value;
    }
}

Blafu::stc_foobar "wert"
__________________
Gedanken aus Draht stricken einen Zaun.

Geändert von Lars (15.11.2005 um 15:24 Uhr)
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 15:22 Nach oben    #9
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard

Ey .. ich raff das nicht.
Also.

Was bringt mir denn bitte das hier?
PHP-Code:
self::${$name} = $value
Was ist denn $name? Ich will doch keine statische Variable setzen ..

Sorry, aber ich sehe gerade noch nicht wie ich das einbauen kann.
Könntest du mir da vielleicht noch behilflich sein?

Grüße Ben.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 15:31 Nach oben    #10
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 965
Standard

Hab erst jetzt geschnallt, was du eigentlich genau willst
PHP-Code:
$userClass $conf->getSettings('SYSTEM') . '_User';
$user UserManager::getUser(UserManager::${$userClass}); 
Dazu: http://www.php.net/manual/de/languag...s.variable.php
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.11.2005, 15:53 Nach oben    #11
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.547
Standard

Jo. Passt. .
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zugriff auf Konfiguration im verschachtelten Array Ben PHP-Programmierung 5 02.02.2007 12:47
Klasse zum Verwaltung von Zeitzonen auf UTC Jay PHP-Programmierung 5 04.05.2006 16:35
Dynamischer Zugriff auf statische Methoden? El Barto PHP-Programmierung 9 22.04.2006 17:37
[VBScript] Probleme mit Zugriff auf Argument der Kommandozeile WarrenFaith Sonstige Programmiersprachen 2 13.02.2006 13:57
Zugriff auf Dateien Im Netz CyberHoney Desktop-Applikationen und Grafik 7 22.09.2004 16:42


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45