zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Singleton erweitern?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 29.04.2008, 20:35
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 28.12.2006
Beiträge: 294
meGa befindet sich auf einem aufstrebenden Ast
Standard Singleton erweitern?

Hey Jungs,

wie kann ich bei einer Singleton Methode Variablen übergeben die die Klasse im constructor definiert hat:

PHP-Code:

class Singleton {
      static private 
$instances = array();
  
      static public function 
getInstance($className)
      {
          if (!isset(
self::$instances[$className]))
          {
             
self::$instances[$className] = new $className();
         }
         return 
self::$instances[$className];
     }
 } 
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 29.04.2008, 20:59
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Ich verstehe nicht was du meinst. Was meinst du mit "Singleton Methode"? Ein Singleton-Pattern ist eine Klasse, keine Methode. Ein Singleton hat auch keinen Konstruktor.

Was genau möchtest du machen?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 29.04.2008, 21:05
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 28.12.2006
Beiträge: 294
meGa befindet sich auf einem aufstrebenden Ast
Standard

Upps Klasse meinte ich eigentlich. Also ich mein das so

Ich habe diese Klasse z.B.
PHP-Code:

class test {

public function 
__construct($settings$user) {}


die rufe ich ja mit singleton so auf:

PHP-Code:

$instance 
Singleton::getInstance("test"); 
aber wie übergebe ich $settigngs und $user?
Mit Zitat antworten
  #4 (permalink)  
Alt 29.04.2008, 21:18
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Ach so meinst du das. Du kannst ganz normal weitere Parameter an die Methode übergeben.
PHP-Code:
$instance Singleton::getInstance("test"$settings$user); 
Ansonsten sollte man bei einem Singleton-Pattern den Konstruktor als private deklarieren um zu verhindern, dass das Objekt direkt erzeugt wird. Am besten auch gleich die Methode __clone definieren und da einen Fehler schmeißen.
Mit Zitat antworten
  #5 (permalink)  
Alt 29.04.2008, 21:20
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 28.12.2006
Beiträge: 294
meGa befindet sich auf einem aufstrebenden Ast
Standard

Ja aber dann muss ich doch die getInstance methode anpassen oder? so

PHP-Code:
static public function getInstance($className$var1$var2
      { 
          if (!isset(
self::$instances[$className])) 
          { 
             
self::$instances[$className] = new $className($var1$var2); 
         } 
         return 
self::$instances[$className]; 
     } 
Oder?
Mit Zitat antworten
  #6 (permalink)  
Alt 29.04.2008, 21:30
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Probier mal Folgendes:
PHP-Code:
class Singleton
{
    static private 
$instances = array(); 

    static public function 
getInstance($className$args=array())
    {
        
$serializedArgs serialize($args);
        if (!isset(
self::$instances[$className][$serializedArgs])) {
            
$reflection = new ReflectionClass($className);
            
self::$instances[$className][$serializedArgs] = call_user_func_array(array(&$reflection'newInstance'), $args);
        }
        return 
self::$instances[$className][$serialized];
    }

Dafür musst du allerdings jedes mal sämtliche Argumente angeben.
__________________
Markus Wulftange
Mit Zitat antworten
  #7 (permalink)  
Alt 29.04.2008, 21:32
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 28.12.2006
Beiträge: 294
meGa befindet sich auf einem aufstrebenden Ast
Standard

sämtliche bedeutetet mehr als eins immer?
Mit Zitat antworten
  #8 (permalink)  
Alt 29.04.2008, 21:36
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Ja die musst du entsprechend anpassen. Die beim Erzeugen des Objektes zu übergeben macht aber keinen Sinn, da du keinen Konstruktor hast. Die Variabeln musst du in deiner getInstance-Methode verarbeiten.

Mir ist gerade erst aufgefallen, dass du mehrere Instanzen vorhalten willst, dazu findest du auch hier Beispielcode:
PHP: Pattern - Manual

Edit: Ups, hab etwas lange gebrauch...
Mit Zitat antworten
  #9 (permalink)  
Alt 29.04.2008, 21:41
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Bei der von mir genannten Singleton-Klasse müssen sämtliche bei der Erzeugung des Objekts angegebenen Argumente jedes mal angegeben werden, da diese als Identifikationsmerkmal dienen (siehe „$serializedArgs“-Variable). Du kannst die Klasse aber auch so umschreiben, dass sie nur bei der Erzeugung des Objekts angegeben werden müssen. Dann ist allerdings immer nur eine Instanz einer Klasse möglich auch wenn sie sich aufgrund unterschiedliche Argumentwerte unterscheiden.
__________________
Markus Wulftange
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 29.04.2008, 21:47
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 28.12.2006
Beiträge: 294
meGa befindet sich auf einem aufstrebenden Ast
Standard

ich merk gerade das ich dann die ganzen klassen umbauen muss. Dann lass ich es lieber und versuch es anders mit methoden die werte zu setzen danke.
Mit Zitat antworten
Sponsored Links
Antwort


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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verschachteln und Erweitern von CSS? DerJo CSS 4 25.01.2010 18:07
XHTML erweitern .rhavin (X)HTML 3 26.11.2009 15:45
CSS Klasse an anderer Stelle erweitern Pari CSS 5 06.03.2009 08:33
Singleton und Vererbung Schelm.isch Serveradministration und serverseitige Scripte 5 17.10.2008 20:50
Kontaktformular mit Checkboxen erweitern ChOpSueY! Serveradministration und serverseitige Scripte 4 10.04.2008 18:18


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:53 Uhr.