Hallo Leute,
habe mich in letzter Zeit mal damit beschäftigt wie man sinnvoll eine Klasse aus einer anderen Klasse aufrufen könnte und bin dabei auf mehrere Möglichkeiten gekommen, die zwar meistens funktionieren, aber nicht immer meinen Bedürfnissen entsprachen.
Hier mal die Methoden die ich gefunden habe:
1. Klassen statisch verwenden
Der Nachteil hierbei ist das man keine Werte in den statischen Klassen speichern kann (außer natürlich statisch, was aber auch nicht immer sinnvoll ist)
2. Singleton
Im Gegensatz zu der statischen Methode finde ich diese Methode schon besser und in bestimmten Fällen auch sehr hilfreich (z.B. Datenbank-Klasse, FTP-Klasse, Mail-Klasse, ....). Aber wenn man diese Klasse mehrmals instanzieren muss und nicht nur einmal, auch wieder unbrauchbar.
3. Instanz übergeben
Diese Methode würde zwar funktionieren, ist aber nicht ganz so flexibel und unsauber.
4. Globalisieren der Instanz
Wahrscheinlich die schlimmste Methode, da dass dann gar nicht mehr flexibel ist und auch unsauber ist.
5. Vererbung der Klasse
Diese Methode ist in bestimmten Fällen auch ganz hilfreich. Aber bei mehreren Klassen, die man in einer Klasse braucht auch schon wieder unbrauchbar.
Jetzt bleibt mir nur die Frage, welche Methode denn am flexibelsten und schönsten wäre. Ich persönlich finde die Singleton-Methode ganz nett, da ich meisten Klassen habe, die nur einmalig instanziert werden müssen, und ich ab und zu mehrere Klassen in einer anderen benötige. Wobei das auch unübersichtlich wird, wenn man in einer Klasse z.B. 5 anderen Klassen per Singleton aufruft.
Wie macht ihr das und würdet ihr Singleton und die anderen Methoden empfehlen?
Freue mich auf eure Ideen, Anmerkungen und Lösungen.
mfg Tobias
habe mich in letzter Zeit mal damit beschäftigt wie man sinnvoll eine Klasse aus einer anderen Klasse aufrufen könnte und bin dabei auf mehrere Möglichkeiten gekommen, die zwar meistens funktionieren, aber nicht immer meinen Bedürfnissen entsprachen.
Hier mal die Methoden die ich gefunden habe:
1. Klassen statisch verwenden
PHP-Code:
class Foo {
public function foo() {}
}
class Bar {
public function foo() {
Foo::foo();
}
}
2. Singleton
PHP-Code:
class Foo {
protected $instance = null;
private function __construct() {}
private function __clone() {}
public function getInstance() {
if (null === self::$instance) {
self::$instance = new self;
}
return self::$instance;
}
public function foo() {}
}
class Bar {
public function foo() {
$foo = Foo::getInstance();
$foo->foo();
}
}
3. Instanz übergeben
PHP-Code:
class Foo {
public function foo() {}
}
class Bar {
public function __construct($foo) {
$this->foo = $foo;
}
public function foo() {
$this->foo->foo();
}
}
4. Globalisieren der Instanz
PHP-Code:
class Foo {
public function foo() {}
}
$foo = new Foo;
class Bar {
public function foo() {
global $foo;
$foo->foo();
}
}
5. Vererbung der Klasse
PHP-Code:
class Foo {
public function foo() {}
}
class Bar extends Foo {
public function foo() {
$this->foo();
}
}
Jetzt bleibt mir nur die Frage, welche Methode denn am flexibelsten und schönsten wäre. Ich persönlich finde die Singleton-Methode ganz nett, da ich meisten Klassen habe, die nur einmalig instanziert werden müssen, und ich ab und zu mehrere Klassen in einer anderen benötige. Wobei das auch unübersichtlich wird, wenn man in einer Klasse z.B. 5 anderen Klassen per Singleton aufruft.
Wie macht ihr das und würdet ihr Singleton und die anderen Methoden empfehlen?
Freue mich auf eure Ideen, Anmerkungen und Lösungen.
mfg Tobias
Kommentar