News - Features - Downloads - Forum - Team - Support - Switch View: Screen
Login - Registrierung - Passwort vergessen

Antworten: 4
Seite [1]
Fr33z3m4n ClanSphere Team


Medal of Honor




Herkunft: Hamm
Beiträge: 11094
# 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
Patrick "Fr33z3m4n" Jaskulski

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.
Inaktiv
Mindcrime


Geekboy





Beiträge: 1155
# 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-pa ttern.html

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


Inaktiv
|
Fr33z3m4n ClanSphere Team
Thread-Ersteller


Medal of Honor




Herkunft: Hamm
Beiträge: 11094
# 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
Patrick "Fr33z3m4n" Jaskulski

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.

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


Weltmeister




Herkunft: Cambridge
Beiträge: 7300
# 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!


Inaktiv
|
Fr33z3m4n ClanSphere Team
Thread-Ersteller


Medal of Honor




Herkunft: Hamm
Beiträge: 11094
# 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
Patrick "Fr33z3m4n" Jaskulski

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.

Inaktiv
|
Antworten: 4
Seite [1]


Sie müssen sich registrieren, um zu antworten.


ClanSphere Project - Mailus - Imprint - Disclaimer - Scriptinfo