Portal > Foren > PHP > PHP-Programmierung > [PHP4]Innerhalb einer statischen Funktion auf den Klassennamen zugreifen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 04.05.2007, 15:33 Nach oben    #1
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard [PHP4]Innerhalb einer statischen Funktion auf den Klassennamen zugreifen

Ich schreibe mir grad eine Klasse, welche Singletons faken soll.

Bitte keine Diskussion, warum PHP4 und nicht PHP5, es ist einfach so.

Jetzt möchte ich der Übsersicht halber eine Singleton-Klasse faken.
Bisher sieht das so aus:
PHP-Code:
<pre><?php

error_reporting
(E_ALL);

$aSingleton = array();

class 
Singleton
{
    function 
getInstance($sName)
    {
        global 
$aSingleton;
        if ((!isset(
$aSingleton[$sName])) || (is_null($aSingleton[$sName])))
        {
            
$aSingleton[$sName] = new $sName();
        }
        return 
$aSingleton[$sName];
    }
}

class 
MySQLConnection extends Singleton
{
    
//...
    
function getInstance()
    {
        return 
parent::getInstance('MySQLConnection');
    }
}

?></pre>
Nice wäre es, wenn ich innerhalb der Funktion Singleton::getInstance auf den Klassennamen zugreifen kann etwa MySQLConnection, damit ich keine getInstance-Funktion in den Singleton-Klassen brauche.
So etwas wie Function.caller in JavaScript.
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis 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 04.05.2007, 15:55 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Ähm, wozu brauchst du das?

Such vielleicht auch mal nach Singleton PHP4 beim Suchdienst deiner Wahl. Da findet man sicherlich auch das Ein oder Andere, z.B. http://www.weberdev.com/get_example-4014.html
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 04.05.2007, 17:01 Nach oben    #3
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ich krieg immer das grauen bei dem Stichwort global...
Das verlinkte Beispiel von Ben ist nicht schlecht, ich habs aber immer über ne statische Klassenvariable gelöst und bei getInstance() einfach nur geschaut, ob die schon gesetzt ist oder noch null und dann entsprechen instanziiert oder den inhalt der klassenvariablen zurückgegeben.
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith 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 04.05.2007, 17:13 Nach oben    #4
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
ich habs aber immer über ne statische Klassenvariable gelöst
Kann man denn static in einer PHP4-Klasse verwenden?

Weiß das gar nicht und bin zu faul um nachzuschauen ..
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 04.05.2007, 17:14 Nach oben    #5
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Öhm verdammt, gute frage
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith 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 04.05.2007, 17:15 Nach oben    #6
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Selbst in PHP5 kommst du aus einer statischen Methode einer Basisklasse nicht an den Namen der Klasse (es sei denn, es wurde in den letzten Wochen implemeniert - hab ich aber nichts von mitbekommen).

Basti
Basti 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 04.05.2007, 17:29 Nach oben    #8
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

...ich bezog mich auf die ursprüngliche Frage, nicht auf deine Abschweifungen *g

Ein statischer Zugriff hat in jedem Fall auch schon in PHP 4 funktioniert. Wann das Schlüsselwort static für Klassen-Attribute eingeführt wurde, weiß ich allerdings nicht. Allerdings komm ich grad nicht drauf, was das mit dem Problem zu tun haben soll.

Basti

PS:
Achso, jetzt seh ich das erst mit der Globalen. Ist natürlich wenig sinnvoll, klar. Aber das eigentliche Problem liegt ja woanders.

PPS:
War hier schonmal Thema:
http://www.phpfriend.de/forum/viewtopic.php?t=56275

Geändert von Basti (04.05.2007 um 17:36 Uhr)
Basti 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 04.05.2007, 20:10 Nach oben    #9
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Ähm, wozu brauchst du das?
Datenbankverbindung, Benutzer-Klasse, Request-Klasse (verarbeitet $_GET, $_POST), ...
Eben überall, wo es nur ein Objekt geben soll, damit kein unnützer Speicher benutzt wird.

Zitat:
Zitat von Ben Beitrag anzeigen
Such vielleicht auch mal nach Singleton PHP4 beim Suchdienst deiner Wahl. Da findet man sicherlich auch das Ein oder Andere, z.B. http://www.weberdev.com/get_example-4014.html
Jo richtig, ist schon was nettes, aber finde ich nicht so toll.

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Ich krieg immer das grauen bei dem Stichwort global...
Jo, habs jetzt mit einer static-Variable innerhalb der Funktion gelöst. Hatte das völlig verdrängt.

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
ich habs aber immer über ne statische Klassenvariable gelöst und bei getInstance() einfach nur geschaut, ob die schon gesetzt ist oder noch null und dann entsprechen instanziiert oder den inhalt der klassenvariablen zurückgegeben.
Zitat:
Zitat von Ben Beitrag anzeigen
Kann man denn static in einer PHP4-Klasse verwenden?
Weiß das gar nicht und bin zu faul um nachzuschauen ..
Nein, geht nicht. PHP5-Feature.

Zitat:
Zitat von Basti Beitrag anzeigen
Selbst in PHP5 kommst du aus einer statischen Methode einer Basisklasse nicht an den Namen der Klasse (es sei denn, es wurde in den letzten Wochen implemeniert - hab ich aber nichts von mitbekommen).

Basti
Jo, schade.

Habs jetzt so gelöst:
PHP-Code:
<?php

class Singleton
{
    function 
getInstance($sName)
    {
        static 
$aSingleton;
        if (
is_null($aSingleton))
        {
            
$aSingleton = array();
        }
        
$sName strtolower($sName);
        if ((!isset(
$aSingleton[$sName])) || (is_null($aSingleton[$sName])))
        {
            
$aSingleton[$sName] =& new $sName();
        }
        return 
$aSingleton[$sName];
    }
}

class 
MySQLConnection extends Singleton
{
    
//...
    
function getInstance()
    {
        return 
parent::getInstance(__CLASS__);
    }
}

?>
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis 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 04.05.2007, 20:14 Nach oben    #10
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Zitat:
Zitat von Artemis Beitrag anzeigen
Zitat:
Zitat von Ben Beitrag anzeigen
Ähm, wozu brauchst du das?
Datenbankverbindung, Benutzer-Klasse, Request-Klasse (verarbeitet $_GET, $_POST), ...
Eben überall, wo es nur ein Objekt geben soll, damit kein unnützer Speicher benutzt wird.
Du hast mich und ich deinen Code falsch verstanden.

Ich weiß schon, was ein Singleton ist und über das andere rede ich nu nicht mehr .. ..
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 04.05.2007, 20:27 Nach oben    #11
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

Jetzt weiß ich, was du meintest. Jo Mißverständnis.
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis 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 04.05.2007, 20:31 Nach oben    #12
Christian W. Achatz
 
Benutzerbild von dr.e.
 
Registriert seit: 05.02.2007
Ort: München
Beiträge: 150
Standard

Hallo Artemis,

ich würde dir hier die Implementierung einer "abstract singleton"-Klasse empfehlen. Damit musst du nicht immer von der Singleton-Klasse ableiten und kannst beliebige Klassen singleton instanziieren. Aussehn kann das so:

$ServiceObject = &Singleton::getInstance('MyServiceObject');

Ein Beispiel für eine derartige Implementierung kannst du dir im ZIP-Package unter http://christian.zierpflanzenberatun...mo_package.zip ansehen. Die Klasse ist im Ordner apps/core/singleton/ abgelegt.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> http://adventure-php-framework.org)!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. 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
[PHP] thumbnails erstellen - kleine Funktion Jann Hendrik Tutorials 2 16.01.2008 10:38
Mit PHP auf Bankdaten zugreifen Berti PHP-Programmierung 17 07.11.2006 12:23
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
unobtrusive JS: 1 funktion auf mehrere elemente pichfl JavaScript und AJAX 2 26.02.2006 17:45
Auf den Inhalt des eigenen jar-Archivs zugreifen? houdini808 Allgemeine Java-Programmierung 6 18.10.2004 12:32


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, 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