php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 02-03-2010, 12:09
Tarlar
 Registrierter Benutzer
Links : Onlinestatus : Tarlar ist offline
Registriert seit: Jul 2004
Beiträge: 265
Tarlar ist zur Zeit noch ein unbeschriebenes Blatt
Standard Singleton, Objekte übergeben oder Statische Klasse

Hallo Leute,

ich sitze derzeit an einem größeren Projekt und wollte von Anfang an eine gute Struktur haben. Deshalb stelle ich mir im Moment die Frage wie ich zentrale Klassen, wie Konfiguration, Seitenmanagement in anderen Klassen verwenden kann. Ich habe mir Gedanken über folgende Möglichkeiten gemacht:
  1. Singleton-Klassen
    Ich erstelle die zentralen Klassen als Singelton-Klassen und benutze in jeder anderen Klasse den Aufruf Singleton::getInstance(). Habe dabei aber ein mulmiges Gefühl in jeder Klasse 2 oder 3 Klassen durch getInstance() zu bekommen
  2. Objekte übergeben
    Ich übergebe jeder Klassen in den Konstruktor die zentralten Klassen. Das ist aber auch nicht viel anders ans die Singleton. Ich müsste auch bei jeder Klasse und jeder neuen Instanz die Objekte übergeben.
  3. Statische Klasse
    Ich habe auch schon öfters was von statischen Klassen gehört, weiß allerdings nciht genau was der große Vorteil an denen sein soll und wie sie genau funktionieren.

Was ist denn so der allgemeine Favorit bei euch?

Vielleicht noch etwas zur Verwendung:
Eine Klasse wird zuständig sein für den Seitenaufbau/-management. Sprich überprüfen ob ein User Zutritt hat, oder welche Template geladen werden soll, etc.

Eine weitere Klasse soll sämtliche Konfigwerte enthalten, die in möglichst allen Klassen verfügbar sein sollen.

Danke für die Hilfe
Mit Zitat antworten
  #2 (permalink)  
Alt 02-03-2010, 12:13
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

aus meiner Sicht ist Variante 2 die einzig saubere. Wenn du die verschiedenen Instanzen der zentralen Klassen in einem Kontext-Objekt sammelst, welches die von den anderen Klassen benötigten Interfaces implementiert, brauchst du auch nur dieses eine zu übergeben.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 02-03-2010, 12:16
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Gleich kommen wieder die Hardliner, die das Singleton-Pattern verdammen werden. Ob man es einsetzt oder nicht, sollte jedem selbst überlassen sein. Wichtig ist: Singleton nur, wenn man ganz sicher weiß, dass die Instanz in der Tat nur ein einziges mal gebraucht wird. Typische Anwendungsfälle eines Singleton auf die das nicht zutrifft sind zum Beispiel Datenbank-Verbindungen & Request/Response-Objekte. Früher oder später braucht man hier eine weitere Instanz, und schon steht man vor einem Dilemma.

Ich persönlich setze aktiv nur ein einziges Singleton ein, und zwar in Form einer Registry, in die ich einfach alles rein schmeiße, was ich woanders nochmal brauche. Parameter halte ich bewusst ebenfalls so gering wie möglich. Faustregel: Mehr als 3 Parameter, und du hast was falsch gemacht.

Statische Klassen eignen sich für statischen Code –*im Grunde Hilfmethoden, die man ansonsten als Funktionen anlegen würde. Für was anderes würde ich es nicht einsetzen.

Aber am Ende ist es wie so oft: Geschmackssache.
Mit Zitat antworten
  #4 (permalink)  
Alt 02-03-2010, 12:23
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Tarlar Beitrag anzeigen
Singleton-Klassen
Ich erstelle die zentralen Klassen als Singelton-Klassen und benutze in jeder anderen Klasse den Aufruf Singleton::getInstance(). Habe dabei aber ein mulmiges Gefühl in jeder Klasse 2 oder 3 Klassen durch getInstance() zu bekommen
kann seinn, dass du die Klassen mit den Objecten verwechselst?
In jedem Fall, liefert Singelton immer nur eine Instance von dem Object, deshalb heisst es auch 'Singelton'
Zitat:
Statische Klasse
Ich habe auch schon öfters was von statischen Klassen gehört, weiß allerdings nciht genau was der große Vorteil an denen sein soll und wie sie genau funktionieren.[/list]
Was ist eine statische Klasse?
Ich kenne nur Statische Methoden und statische Variablen, die auch Objecte sein können .

In jedem Fall passt bei deiner Konfigurationsobject der Singelton ziemlich gut.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #5 (permalink)  
Alt 02-03-2010, 12:27
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Slava Beitrag anzeigen
Was ist eine statische Klasse?
Eine statische Klasse ist eine, die ausschließlich aus statischen Members (statische Properties und statische Methoden) und Konstanten besteht, also nichts anderes als ein funktionsbasiertes, monolithisches PHP-Skript mit "class NAME { ... }" umgossen, "const" statt "define" und "public static" vor jedem Member.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 02-03-2010, 12:29
Tarlar
 Registrierter Benutzer
Links : Onlinestatus : Tarlar ist offline
Registriert seit: Jul 2004
Beiträge: 265
Tarlar ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Slava Beitrag anzeigen
kann seinn, dass du die Klassen mit den Objecten verwechselst?
In jedem Fall, liefert Singelton immer nur eine Instance von dem Object, deshalb heisst es auch 'Singelton'
Richtig müsste es natürlich "Habe dabei aber ein mulmiges Gefühl in jeder Klasse 2 oder 3 Objekte durch getInstance() zu bekommen."

Ich sehe den Vorteil bei Singleton darin, dass ich die Objekte einmal im Konstruktor lade und nicht bei jedem neuen Objekt die Objekte der Konfigklasse übergeben muss!
Mit Zitat antworten
  #7 (permalink)  
Alt 02-03-2010, 12:33
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Tarlar Beitrag anzeigen
Ich sehe den Vorteil bei Singleton darin, dass ich die Objekte einmal im Konstruktor lade und nicht bei jedem neuen Objekt die Objekte der Konfigklasse übergeben muss!
Das hast du richtig erkannt, aber das birgt auch Nachteile, die das Singleton-Pattern in Verruf gebracht haben:
  1. Du kannst keine vernünftigen automatischen Tests bauen.
  2. Du erkennst die Abhängigkeit zwischen den Klassen nur am Code und nicht an der Methodensignatur
  3. Du kannst später nicht vernünftig davon ableiten.

... und sicher noch weitere, die mir grad nicht einfallen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 02-03-2010, 12:43
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Eine statische Klasse ist eine, die ausschließlich aus statischen Members (statische Properties und statische Methoden) und Konstanten besteht, also nichts anderes als ein funktionsbasiertes, monolithisches PHP-Skript mit "class NAME { ... }" umgossen, "const" statt "define" und "public static" vor jedem Member.
mit anderen Worten ein Ersatz für NAMESPACE.
Du hast Recht. In diesem Kontext die Bezeichnung 'statische Klasse' ein Sinn hat.
__________________
Slava
bituniverse.com

Geändert von Slava (02-03-2010 um 12:46 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 02-03-2010, 13:14
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Gleich kommen wieder die Hardliner, die das Singleton-Pattern verdammen werden.
Genau!
So einer bin ich!


Meine Ansicht:
In einem Framework oder einer auf Wiederverwendbarkeit ausgelegten Klassenbibliothek haben Singletons nix zu suchen. Ob irgendwas ein Singleton ist, oder sich so verhalten soll, ist eine Anforderung der konkreten Applikation. Diese Anforderung in die universelle Bibliothek zu transportieren halte ich für unklug.

Die wichtigsten Gründe, welche gegen Singletons sprechen, hat AmicaNoctis schon genannt.
__________________
Wir werden alle sterben

Geändert von combie (02-03-2010 um 13:16 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 02-03-2010, 13:54
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Genau!
So einer bin ich!


Meine Ansicht:
In einem Framework oder einer auf Wiederverwendbarkeit ausgelegten Klassenbibliothek haben Singletons nix zu suchen. Ob irgendwas ein Singleton ist, oder sich so verhalten soll, ist eine Anforderung der konkreten Applikation. Diese Anforderung in die universelle Bibliothek zu transportieren halte ich für unklug.

Die wichtigsten Gründe, welche gegen Singletons sprechen, hat AmicaNoctis schon genannt.
Wenn PHP mit Statischen Methoden allgemein die Probleme hat, ist aber kein Grund von einem Singelton abzuraten.
Die von AmicaNoctis beschriebene 3 Gegenargumente kann ich nur bedingt nachvollziehen.

für eine Primitive Bibliothek könnte vielleicht Singelton unnötig sein, aber bei einem Framework, bei dem mehrere Zusammenhänge und Abhängigkeiten zwischen Modulen bestehen wäre es unklug auf Singelton zu verzichten.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #11 (permalink)  
Alt 02-03-2010, 14:15
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Slava Beitrag anzeigen
Die von AmicaNoctis beschriebene 3 Gegenargumente kann ich nur bedingt nachvollziehen.
Was kannst du denn nicht nachvollziehen?

Zitat:
Zitat von Slava Beitrag anzeigen
für eine Primitive Bibliothek könnte vielleicht Singelton unnötig sein, aber bei einem Framework, bei dem mehrere Zusammenhänge und Abhängigkeiten zwischen Modulen bestehen wäre es unklug auf Singelton zu verzichten.
Genau anders herum sehe ich es.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #12 (permalink)  
Alt 02-03-2010, 14:18
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
für eine Primitive Bibliothek könnte vielleicht Singelton unnötig sein, aber bei einem Framework, bei dem mehrere Zusammenhänge und Abhängigkeiten zwischen Modulen bestehen wäre es unklug auf Singelton zu verzichten.
Dem kann ich nicht zustimmen.
Singletons schaffen (unnötige) Abhängigkeiten zwischen den Klassen. Diese Abhängigkeiten erweisen sich später häufig als "Klotz am Bein".
__________________
Wir werden alle sterben
Mit Zitat antworten
  #13 (permalink)  
Alt 02-03-2010, 14:21
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Dem kann ich nicht zustimmen.
Singletons schaffen (unnötige) Abhängigkeiten zwischen den Klassen. Diese Abhängigkeiten erweisen sich später häufig als "Klotz am Bein".
Ergänzung: Abhängigkeiten gibt es immer, aber Singletons schaffen hartgecodete Abhängigkeiten (tight coupling), während die Übergabe von Parametern auswechselbare und gut erkennbare Abhängigkeiten (loose coupling) schafft.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #14 (permalink)  
Alt 02-03-2010, 14:29
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Static call versus Singleton call in PHP Hardcoded
Mit Zitat antworten
  #15 (permalink)  
Alt 02-03-2010, 14:59
Tarlar
 Registrierter Benutzer
Links : Onlinestatus : Tarlar ist offline
Registriert seit: Jul 2004
Beiträge: 265
Tarlar ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Es geht bei mir um eine solche geringe Anzahl an aufrufen. Da kann man nicht diesen Performancevergleich zu Rate ziehen.

Aber ich sehe schon, dass die Meinungen stark auseinandergehen und es schlussendlich doch Geschmacksache ist, für welche Alternative ich mich entscheide!
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/98969-singleton-objekte-uebergeben-oder-statische-klasse.html
Erstellt von For Type Datum
MetaGer, Suche nach: php Nachteile static Funktionen This thread Refback 06-03-2013 17:30

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP5] Statische Klasse GELight PHP Developer Forum 7 17-03-2009 12:07
Singleton Pattern für DB Klasse Luka PHP Developer Forum 8 29-12-2008 00:36
Singleton Muster für Datenbank Klasse - Nachteile? Turbo PHP Developer Forum 2 28-11-2006 08:43
Singleton oder nicht Singleton... s02 PHP Developer Forum 3 06-04-2006 16:39
aus Elternklasse auf statische Methode in abgeleiteter Klasse zugreifen spacehorst PHP Developer Forum 1 07-06-2005 14:15

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:52 Uhr.