Usermenu


Login dauerhaft merken
Registrierung
Passwort vergessen
User Birthdays
CrEaK (19)
VKWUndergrounD (22)
Users Online: 10
Poll
Keine Umfrage aktiv
Banners / Partner
www.fastwebs24.de Your fast Webspace Provider and more Clandesigns, Clantemplates, Modifications and More
Contact
Optimized for
Latest Posts
Keine neuen Beiträge
Advert
ClanSphere T-Shirt
Forum - Thema
Nächstes Thema ->
Forum -> Hilfe -> PHP -> Singleton Mehrfachvererbung

Antworten: 4
< [1] >
Fr33z3m4n ClanSphere Team


VIP - Poster




Herkunft: Hamm
Beiträge: 10502
# Thema - 17.02.2010 um 09:14 Uhr
Hi,

hab derzeit eine Singleton Class, in der ich die jeweilige Class per Reflektion lade.
Damit ich dieses singleton nicht in jede Klasse schreiben muss, hab ich diese in eine seperate gepackt, und vererbe diese an die jeweilige Klasse.

Nur jetzt hab ich leider ein Problem damit.
Da in PHP5 keine Mehrfachvererbung möglich ist, fehlt mir leider z.b. das vererben der PDO Klasse.

Wenn es sich hier nur um eine Klasse handeln würde, wäre mir das egal, würde ich sogar damit leben, das Singleton direkt in die PDOKlasse zu implentieren.

Jedoch kommen noch weitere klassen, in denen ich ggf. weitere PHP Klassen vererben will/muss.

Habt Ihr Ideen/Lösungsansätze ?

Interfaces und weitere abstracte Klassen lassen mich auch nur im Kreis laufen.


------------------
mfg
Fr33z3m4n

Antoine de Saint-Exupéry: Wenn Du ein Schiff bauen willst, so trommle nicht Männer zusammen, um Holz zu beschaffen, Aufgaben zu verteilen, sondern lehre die Männer die Sehnsucht nach dem endlosen weiten Meer.
visit "Trackmania Friends"

ClanSphere ESL Fan Community - Join Now

Offline
Mindcrime


Going for pro





Beiträge: 528
# Antwort: 1 - 17.02.2010 um 10:50 Uhr
Geht leider nicht wirklich... Du kannst am besten dan besser mit ein Handler class und ein getInstance() function arbeiten...

http://www.talkphp.com/advanced-php-programming/1304-how-use-singleton-design-p attern.html

Keine multiple inheritance und kein include() in classes sind die zwei meist nerfende dinger in PHP Classes...


Offline
|
Fr33z3m4n ClanSphere Team


VIP - Poster




Herkunft: Hamm
Beiträge: 10502
# Antwort: 2 - 17.02.2010 um 11:01 Uhr
Joar, so in der art mach ich das auch immo.
Halt nur über Reflection.

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.
1. / 2. / ...  abstract class Singleton {
    
    private static 
$instances = array();
    static 
$rc = array();

    final public static function 
getInstance() {
        
$class get_called_class();
        if (empty(
self::$instances[$class])) {
            
Singleton::$rc[$class] = new ReflectionClass($class);
            
self::$instances[$class] = Singleton::$rc[$class]->newInstanceArgs(func_get_args());
        }
        return 
self::$instances[$class];
    }

    final public function 
__clone() {
        throw new 
Exception('This singleton must not be cloned.');
    }
    
    public function 
__toString() {
        
$sReturn '';
        foreach(
self::$rc AS $array) {
            
$sReturn .= '<pre>' $array '</pre><hr>';
        }
        
$sReturn .= '<pre>' . new ReflectionClass(__CLASS__) . '</pre><hr>';
        return 
$sReturn;
    }     
}


für die Datasource muss ich das leider selber implentieren :(

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.
1. / 2. / ...  class Datasource extends PDO {
    
    private static 
$instances null;
    protected 
$dbh
    
    final public static function 
getInstance() {
        if (
self::$instances === null) {
            
$rc = new ReflectionClass('Datasource');
            
self::$instances $rc->newInstanceArgs(func_get_args());
        }
        return 
self::$instances;
    }

    final public function 
__clone() {
        throw new 
Exception('This singleton must not be cloned.');
    }  

    public function 
__construct($type$host$user$pass$db) {
        
$dsn $type ':dbname=' $db ';host=' $host;
        try {
            
$this->dbh = new PDO($dsn$user$pass); 
        } catch (
PDOException $e) {
            echo 
'Connection failed: ' $e->getMessage(); 
        }
    }    
}



und für die einzelnen Datenbanktype mach ich halt
1.
2.
1. / 2. / ...  class MySQL extends Datasource {
}


kein include() in classes

Da das ganze dann noch über autoload funktioniert, brauch ich mir erstmal über includes keine Gedanken machen.


------------------
mfg
Fr33z3m4n

Antoine de Saint-Exupéry: Wenn Du ein Schiff bauen willst, so trommle nicht Männer zusammen, um Holz zu beschaffen, Aufgaben zu verteilen, sondern lehre die Männer die Sehnsucht nach dem endlosen weiten Meer.
visit "Trackmania Friends"

ClanSphere ESL Fan Community - Join Now



Zuletzt editiert von Fr33z3m4n ClanSphere Team am 17.02.2010 um 11:07 Uhr (4x Editiert)
Offline
|
duRiel ClanSphere Team


VIP - Poster




Herkunft: Köln
Beiträge: 7554
# Antwort: 3 - 17.02.2010 um 15:22 Uhr
17.02.2010 um 10:50 Uhr - Mindcrime:
Geht leider nicht wirklich... [...]
Keine multiple inheritance und kein include() in classes sind die zwei meist nerfende dinger in PHP Classes...


agree!


------------------
Mein Blog

Inaktiv
|
Fr33z3m4n ClanSphere Team


VIP - Poster




Herkunft: Hamm
Beiträge: 10502
# Antwort: 4 - 17.02.2010 um 15:25 Uhr
jojo duRiel hab ich ja selber auch gemerkt
Hab das nun auch ohne Vererbung gemacht.
Singleton-Class gilt für mich als Objekt-Container, mit der man die einzelnen Klassen instanziert.


------------------
mfg
Fr33z3m4n

Antoine de Saint-Exupéry: Wenn Du ein Schiff bauen willst, so trommle nicht Männer zusammen, um Holz zu beschaffen, Aufgaben zu verteilen, sondern lehre die Männer die Sehnsucht nach dem endlosen weiten Meer.
visit "Trackmania Friends"

ClanSphere ESL Fan Community - Join Now



Offline
|
Antworten: 4
< [1] >


Sie müssen sich registrieren, um zu antworten.