php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Thema geschlossen
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.07.2010, 00:07  
Benutzer
 
Registriert seit: 01.03.2010
Beiträge: 53
PHP-Kenntnisse:
Anfänger
Tobby befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Klasse aus einer anderen Klasse aufrufen

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
PHP-Code:
class Foo {
    public function 
foo() {}
}

class 
Bar {
    public function 
foo() {
        
Foo::foo();
    }

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
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();
    }

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
PHP-Code:
class Foo {
    public function 
foo() {}
}

class 
Bar {
    public function 
__construct($foo) {
        
$this->foo $foo;
    }
    public function 
foo() {
        
$this->foo->foo();
    }

Diese Methode würde zwar funktionieren, ist aber nicht ganz so flexibel und unsauber.


4. Globalisieren der Instanz
PHP-Code:
class Foo {
    public function 
foo() {}
}

$foo = new Foo;

class 
Bar {
    public function 
foo() {
        global 
$foo;
        
$foo->foo();
    }

Wahrscheinlich die schlimmste Methode, da dass dann gar nicht mehr flexibel ist und auch unsauber ist.


5. Vererbung der Klasse
PHP-Code:
class Foo {
    public function 
foo() {}
}

class 
Bar extends Foo {
    public function 
foo() {
        
$this->foo();
    }

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
Tobby ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.07.2010, 00:13  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Ich werf' mal Dependency Injection in den Raum.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline  
Alt 11.07.2010, 11:16  
Erfahrener Benutzer
 
Registriert seit: 10.02.2009
Beiträge: 929
ragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Mensch
Standard

http://www.php.de/520669-post15.html
ragtek ist offline  
Alt 11.07.2010, 12:07  
Benutzer
 
Registriert seit: 01.03.2010
Beiträge: 53
PHP-Kenntnisse:
Anfänger
Tobby befindet sich auf einem aufstrebenden Ast
Standard

So habe mal ein wenig zu Dependency Injection durchgelesen, davon verstehe ich zwar grad noch nicht so viel, aber ich lese es mir einfach nochmal durch und schaue mir Code-Beispiele an (kennt ihr da vielleicht ein paar gute?).

Zu dem anderen Post (http://www.php.de/520669-post15.html):
Die erste Möglichkeit habe ich ja auch schon oben geschrieben.
Die zweite Möglichkeit auch schon halb, wobei IMHO das instanzieren der Klasse meistens nur Performance frisst.
Die dritte Möglichkeit wäre vielleicht noch eine Idee, die ich mir auch nochmal anschauen werde.

mfg Tobby
Tobby ist offline  
Alt 11.07.2010, 12:18  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Via Type Hint kannst du es auch umsetzen. Da übergibst du den Namen der Klasse und das Objekt bzw. die Objekt Variable einer Methode.

Gruß litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 11.07.2010, 12:30  
Erfahrener Benutzer
 
Registriert seit: 10.02.2009
Beiträge: 929
ragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Mensch
Standard

Was hoffst du eigentlich mit
PHP-Code:
class Foo {
    public function 
foo() {}
}

class 
Bar extends Foo {
    public function 
foo() {
        
$this->foo();
    }

IMHO endet das mit nem Fehler da du da eine Endlosschleife produziert hast (sorry falls es nicht so ist, hab gerade keine Umgebung um es zu testen)
Du meinst wohl parent::foo
ragtek ist offline  
Alt 11.07.2010, 21:51  
Benutzer
 
Registriert seit: 01.03.2010
Beiträge: 53
PHP-Kenntnisse:
Anfänger
Tobby befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ragtek Beitrag anzeigen
Was hoffst du eigentlich mit
PHP-Code:
class Foo {
    public function 
foo() {}
}

class 
Bar extends Foo {
    public function 
foo() {
        
$this->foo();
    }

IMHO endet das mit nem Fehler da du da eine Endlosschleife produziert hast (sorry falls es nicht so ist, hab gerade keine Umgebung um es zu testen)
Du meinst wohl parent::foo
Ja, du hast recht, waren wohl mehrere Flüchtigkeitsfehler auf einmal

Habe jetzt einen ganz netten Artikel über Dependency Injection gefunden, falls es noch jemanden interessiert: What is Dependency Injection? - Fabien Potencier

mfg Tobby
Tobby ist offline  
Alt 14.07.2010, 20:05  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Mit Verweis auf: http://www.php.de/520669-post15.html

[MOD: Thread geschlossen]
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Thema geschlossen


Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Nur einer bestimmten Klasse Zugriff andere Klasse erlauben Turamisi Software-Design 2 20.02.2010 20:31
Klassen in anderen Klassen verfügbar machen Kein Genie PHP Tipps 2010 5 16.01.2010 20:34
Klasse für Objekteigenschaft erzeugen? Asipak PHP-Fortgeschrittene 25 30.05.2009 19:45
[Erledigt] Eine klasse einbinden newWorldOrder PHP Tipps 2009 2 23.02.2009 19:32
variablen/functionen auf einer anderen seite aufrufen superfutzi PHP Tipps 2008 2 26.12.2008 16:06
funktion innerhalb einer Klasse mit call_user_func aufrufen phpbeginner PHP Tipps 2008 8 22.05.2008 16:20
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
funnktion aus klasse aufrufen nieselfriem PHP Tipps 2008 3 05.01.2008 14:35
Klasenname einer nicht instanziierten Klasse DerDesian PHP Tipps 2007 9 30.11.2005 13:13
[Erledigt] Führerschein für Klasse A+B.. Preis OK??? Off-Topic Diskussionen 20 13.07.2005 18:44
Wert einer Variable in einer anderen Funtion übernehmen seven-12 PHP Tipps 2005-2 7 14.06.2005 00:36
Methode aus einer anderen Methode aufrufen PHP Tipps 2005 3 02.03.2005 10:07
[Erledigt] Instanz bilden innerhalb einer Klasse PHP Tipps 2004 7 11.12.2004 12:58
Funktion einer Klasse über Link aufrufen? MortakArtos PHP Tipps 2004-2 4 18.11.2004 12:05
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-fortgeschrittene/69619-erledigt-klasse-aus-einer-anderen-klasse-aufrufen.html, php klasse in einer anderen klasse aufrufen, php globale klasse in klasse aufrufen, php klasse aufrufen, php klasse aus klasse aufrufen, klasse in anderer klasse aufrufen, eine klasse in einer anderen verwenden, php andere klasse in konstruktor instaziieren, klasse innerhalb anderer klasse aufrufen, eine classe aus einer anderen aufrufen#, mehrere methoden aufrufen php, klasse in klasse global benutzen php, methode aus anderen klassen aufrufen, php public funktion andere php seite aufrufen, net klasse funktion aus klasse aufrufen, php klasse von einer anderen klasse aus aufrufen, funktion php class zweimal aufrufen, funktion von einer anderen seite aufrufen php, main in anderer klasse aufrufen, php aufruf mehreren classen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum