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 Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 24-11-2008, 23:22
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von phpguru42
Wenn man allein an einem Projekt arbeitet, mag das ja ok sein.
Aber stell' Dir mal ein größeres Projekt vor, mit neuen, unerfahrenen Entwicklern, die ins Team kommen. Wie willst Du dann verhindern, das eine neue Instanz mit new() erzeugt wird?
Konvention?
Im Übrigen lassen sich Registry und Singleton auch vereinen.

Grüße
Mit Zitat antworten
  #17 (permalink)  
Alt 24-11-2008, 23:32
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

@phpguru42
Wann und in welcher konkreten Situation ist denn deiner Ansicht nach ein Singleton die bessere Wahl?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #18 (permalink)  
Alt 24-11-2008, 23:42
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

Zitat:
Original geschrieben von phpguru42
Wenn man allein an einem Projekt arbeitet, mag das ja ok sein.
Aber stell' Dir mal ein größeres Projekt vor, mit neuen, unerfahrenen Entwicklern, die ins Team kommen. Wie willst Du dann verhindern, das eine neue Instanz mit new() erzeugt wird?
Mit den selben Mitteln, mit denen du verhinderst, dass Sie bereits existierende Routinen neu schreiben ...

Bzgl. Singleton glaube ich, dass es sich dabei um genau so ein grundlegendes Missverständnis handelt, wie mit der hungarian Notation. Nicht kapiert, trotzdem gut, weitererzählt. Aber nicht im Sinne des Erfinders. EIgentlich sollte ich mich da mal schlau machen und gucken, was Fowler dazu schreibt. Ich meld mich morgen diesbezüglich nochmal

Geändert von unset (24-11-2008 um 23:48 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 25-11-2008, 00:00
phpguru42
 Newbie
Links : Onlinestatus : phpguru42 ist offline
Registriert seit: Oct 2008
Beiträge: 71
phpguru42 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von unset
Mit den selben Mitteln, mit denen du verhinderst, dass Sie bereits existierende Routinen neu schreiben ...
Nur mit dem Unterschied, dass ich als Neuling im Team genau diese Klasse aus der Dokumentation jetzt gerade gebrauchen könnte und mir desshalb ein Objekt mit new bar() schnell ranhole, weil ich nicht wusste, dass man dazu $bar = Registry::get('bar') benutzt. Die Idee, die Klasse mit 1000 Zeilen neu zu implementieren, wäre mir dann erst später gekommen
Mit Zitat antworten
  #20 (permalink)  
Alt 25-11-2008, 00:01
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

Zitat:
Original geschrieben von phpguru42
Nur mit dem Unterschied, dass ich als Neuling im Team genau diese Klasse aus der Dokumentation jetzt gerade gebrauchen könnte und mir desshalb ein Objekt mit new bar() schnell ranhole, weil ich nicht wusste, dass man dazu $bar = Registry::get('bar') benutzt. Die Idee, die Klasse mit 1000 Zeilen neu zu implementieren, wäre mir dann erst später gekommen
Und in dieser Dokumentation ist nicht vermerkt, dass das Objekt in der global verfügbaren Registry hinterlegt ist? Was für eine beschissene Doku.
Mit Zitat antworten
  #21 (permalink)  
Alt 25-11-2008, 00:11
phpguru42
 Newbie
Links : Onlinestatus : phpguru42 ist offline
Registriert seit: Oct 2008
Beiträge: 71
phpguru42 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

unset, welch sachliches Argument, und vermutlich sind die GoF auch Schwachköpfe in Deinen Augen.


Manchmal fragt man sich echt.
Mit Zitat antworten
  #22 (permalink)  
Alt 25-11-2008, 00:22
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

Zitat:
Original geschrieben von phpguru42
unset, welch sachliches Argument, und vermutlich sind die GoF auch Schwachköpfe in Deinen Augen.


Manchmal fragt man sich echt.
Du begreifst nicht, auf was ich hinaus will. Du wirst in einem Team rein gar nicht verhindern können. Du wirst nur eine gewisse Menge von Mitteln haben, um bestimmte Konventionen (evtl. ist dir das Wort in diesem Thread schon über den Weg gelaufen ...) aufzustellen, an die man sich halten muss. Diese Konventionen können unter anderem eine Dokumentation der Struktur beinhalten, die dem Neuling nicht nur sagt, was welche Klassen machen, sondern auch wo sie in welcher Instanz zur Verfügung stehen.

Und nein, die GoF sind keine Idioten. Es sind aber auch keine unfehlbaren Götter.

Evtl. liest du auch mal, was man hier sonst so schreibt. Deine unqualifizierten Beispiele sind nunmal Steilvorlagen für ebenso unqualifizierte Antworten.

Und jetzt darfst du dich wieder fragen, du Guru.
Mit Zitat antworten
  #23 (permalink)  
Alt 25-11-2008, 00:34
phpguru42
 Newbie
Links : Onlinestatus : phpguru42 ist offline
Registriert seit: Oct 2008
Beiträge: 71
phpguru42 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von unset
Du wirst nur eine gewisse Menge von Mitteln haben, um bestimmte Konventionen (evtl. ist dir das Wort in diesem Thread schon über den Weg gelaufen ...) aufzustellen, an die man sich halten muss. Diese Konventionen können unter anderem eine Dokumentation der Struktur beinhalten, die dem Neuling nicht nur sagt, was welche Klassen machen, sondern auch wo sie in welcher Instanz zur Verfügung stehen.
Ja, und das Singleton-Pattern hilft dabei, versehentlich eine neue Instanz zu erzeugen, wenn es nicht dokumentiert wurde. Warum soll man auf restriktive Mechanismen der Programmiersprache nicht zurückgreifen dürfen?

Ebenso könntest Du das Type Hinting in PHP5 ins lächerliche ziehen, schließlich sind doch in der Doku die Typen für jeden Funktions- / Methodenaufruf per Konvention festgelegt! Und wenn nicht, dann ist es eine beschissene Doku.
Mit Zitat antworten
  #24 (permalink)  
Alt 25-11-2008, 00:43
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Du verstehst nicht, worauf die beiden hinaus wollen. Das Singletan-Pattern ist vielleicht sehr nützlich, das Registry-Pattern erfüllt aber die gleiche Anforderung, eine anwendungsweite Instanz zur Verfügung zu stellen, verhindert dabei aber nicht, das weitere Instanzen der Klasse erstellt werden können. Das ist am Beispiel Datenbankverbindung sehr schön zu sehen.
Sinnvoll finde ich das Singleton-Pattern dennoch in einer Abwandlung, die weitere Instanzen zulässt, d.h. der Konstruktor bleibt public. Damit erreichst du das gleiche, wie im Registry-Pattern, aber direkt an der Klasse und damit für jeden sofort ersichtlich.
Mit Zitat antworten
  #25 (permalink)  
Alt 25-11-2008, 00:43
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

Zitat:
Original geschrieben von phpguru42
Ja, und das Singleton-Pattern hilft dabei, versehentlich eine neue Instanz zu erzeugen, wenn es nicht dokumentiert wurde. Warum soll man auf restriktive Mechanismen der Programmiersprache nicht zurückgreifen dürfen?
Wenn du tatsächlich das manuelle erstellen von Instanzen verhindern willst, wirst du Exceptions werfen, sollte man das versuchen. Das ist darüberhinaus auch sauberer, als einen Entwickler ins Messer rennen zu lassen.

Ich bin ohnehin der Meinung, dass Singelton Klassen ausschließlich über Factory-Helfer erstellt werden sollten. Damit wäre zum einen das ungewollte mehrfache Instanzieren als auch das evtl. begrenzte Instanzieren abgegolten.

Prinzipiell ist es mir aber scheiß egal, wie andere Leute ihre Software zusammenschrauben. Ich hab nur keinen Bock, von daraus resultierenden dummen Fragen und im Vorfeld erkannten Problemen lesen zu müssen.

Es ist, wie ich auch schon vorher sagte, wie mit der ungarischen Notation: Ist falsch verstanden immer noch gut. Aber nicht das beste.
Mit Zitat antworten
  #26 (permalink)  
Alt 25-11-2008, 08:40
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wikipedia sagt u.A. dazu:
Zitat:
Das korrekte Design von Singletons ist schwierig – in der Regel schwieriger als Designs ohne Singletons.
Und dem kann ich nur zustimmen!
Nagut, das fällt einem nicht sofort auf, aber bei Wartungsarbeiten wird man doch mit der Nase voll da rein gestoßen.

Und nochmal:
Singletons machen unter PHP die Vererbung kaputt.
Will man das wirklich?
Das ist eine ziemlich hässliche Einschränkung.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #27 (permalink)  
Alt 25-11-2008, 13:15
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

Und nochmal ich. Wie versprochen habe ich Patterns of Enterprise Application Architecture zu Rate gezogen. Und siehe da: Fowler erwähnt Singletons lediglich im zusammenhang mit einer Registry ...
Mit Zitat antworten
  #28 (permalink)  
Alt 25-11-2008, 14:19
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Hat man einmal begriffen, wie ein Hammer funktioniert, dann sieht die ganze Welt plötzlich wie ein Nagel aus...
__________________
Wir werden alle sterben
Mit Zitat antworten
  #29 (permalink)  
Alt 25-11-2008, 15:34
phpguru42
 Newbie
Links : Onlinestatus : phpguru42 ist offline
Registriert seit: Oct 2008
Beiträge: 71
phpguru42 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
Und nochmal:
Singletons machen unter PHP die Vererbung kaputt.
Will man das wirklich?
Das ist eine ziemlich hässliche Einschränkung.
Dafür gibt es inzwischen eine Lösung: Implementing a Singleton Base Class in PHP 5.3
Mit Zitat antworten
  #30 (permalink)  
Alt 25-11-2008, 15:44
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

1. Habe ich das schon gesagt, aber danke für die Wiederholung, dann begreift es wenigstes auch der Letzte....
Zitat:
Die Singleton Eigenschaft einer Klasse ist unter PHP<5.3 nicht vererbbar.
2. ist PHP5.3/6 noch lange nicht für den Produktiveinsatz geeignet.

Das war also nix....
__________________
Wir werden alle sterben
Mit Zitat antworten
Antwort

Lesezeichen


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

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 09:29 Uhr.