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
  #1 (permalink)  
Alt 13-07-2010, 12:47
dakingno1
 Registrierter Benutzer
Links : Onlinestatus : dakingno1 ist offline
Registriert seit: Nov 2006
Beiträge: 149
dakingno1 ist zur Zeit noch ein unbeschriebenes Blatt
Unhappy 2 Klassen initialiseren sich gegenseitig

Hallo,

ich habe in meinem Projekt logischerweise mehrere Klassen.
Einige davon benötigen sich jedoch immer gegenseitig.
Ich habe zum Beipsiel eien Klasse Shop.class.php und eine Klasse Angebot.class.php

Beide implementieren das Singleton interface.
Jeweils im Konstruktor initialisiere ich eine Klassenvariable mit der Instanz der entsprechenden Klasse.
Was passiert, könnt ihr euch ja vielleicht denken.
Das Projekt geht in eine Endlosschleife mit der folgenden Fehlermeldung:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 52 bytes) in...

Wie kann man das Problem umgehen?
Bisher ist bei mir noch nie so ein Problem aufgetreten.

Vielen Dank im voraus.
Mit Zitat antworten
  #2 (permalink)  
Alt 13-07-2010, 12:56
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

Initialisiere das Gegenstück erst, wenn du die aufrufende Klasse bereits vollständig initialisiert hast …*bzw. zumindest bis zu dem Punkt, wo die Singleton-Methode auch eine Instanz zurückliefern kann!
Mit Zitat antworten
  #3 (permalink)  
Alt 13-07-2010, 13:17
dakingno1
 Registrierter Benutzer
Links : Onlinestatus : dakingno1 ist offline
Registriert seit: Nov 2006
Beiträge: 149
dakingno1 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja, daran habe ich auch schon gedacht, aber dann mussi ch immer sicherstellen dass die initialisierung in der Funktion aufgerufen wird die imemr als erstes benötigt wird, damit in den nächsten Funktionen die Instanz auch vorhanden ist.
Klingt auchn icht wirklich sauber.
Mit Zitat antworten
  #4 (permalink)  
Alt 13-07-2010, 14:02
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

Dass ein Angebot nur in einem Shop existieren kann, sehe ich ein. Aber wieso kann ein Shop nur existieren, wenn es ein Angebot gibt?
Mit Zitat antworten
  #5 (permalink)  
Alt 13-07-2010, 14:52
dakingno1
 Registrierter Benutzer
Links : Onlinestatus : dakingno1 ist offline
Registriert seit: Nov 2006
Beiträge: 149
dakingno1 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
Dass ein Angebot nur in einem Shop existieren kann, sehe ich ein. Aber wieso kann ein Shop nur existieren, wenn es ein Angebot gibt?
Hallo, ja du hast recht, aber die Klasse Shop benötigt einige Informationen zu einem Angebot und daher die initialisierung im Konstruktor.
Mit Zitat antworten
  #6 (permalink)  
Alt 13-07-2010, 15:13
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

Warum Angebot ein Singleton ist, verstehe ich am wenigsten … selbst wenn das bei dir so ist: Woanders ist es nicht so. Grund genug, Angebot nicht als Singleton zu implementieren.
Mit Zitat antworten
  #7 (permalink)  
Alt 13-07-2010, 15:35
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

Zitat:
Zitat von dakingno1 Beitrag anzeigen
… die Klasse Shop benötigt einige Informationen zu einem Angebot und daher die initialisierung im Konstruktor.
Welche Informationen sollen das sein und müssen die wirklich schon im Konstruktor bekannt sein? Vermutlich fackelst du viel zu viel im Ctor ab.
Mit Zitat antworten
  #8 (permalink)  
Alt 13-07-2010, 16:15
dakingno1
 Registrierter Benutzer
Links : Onlinestatus : dakingno1 ist offline
Registriert seit: Nov 2006
Beiträge: 149
dakingno1 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Eigentlich werden dort nur einige Klassenvariablen mit den entsprechenden Instanzen der benötigten Klassen initialisiert...
Mit Zitat antworten
  #9 (permalink)  
Alt 13-07-2010, 19:46
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

Wofür wird denn die Angebots-Instanz im Konstruktor benötigt? Sie sollte an dieser Stelle überhaupt nicht benutzt werden, denn wie bereits erwähnt, muss ein Shop auch ohne Angebote funktionieren. Wenn sie nicht benutzt wird, sollte sie da allenfalls optional hineingereicht werden, aber keinesfalls zwangsweise vorhanden sein müssen.

Wenn sich der Abhängigkeitsknoten in deinem Kopf nicht langsam löst, zeig mal etwas Code her.
Mit Zitat antworten
  #10 (permalink)  
Alt 13-07-2010, 20:51
litterauspirna
 Registrierter Benutzer
Links : Onlinestatus : litterauspirna ist offline
Registriert seit: Nov 2007
Beiträge: 364
litterauspirna ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von dakingno1 Beitrag anzeigen
Hallo, ja du hast recht, aber die Klasse Shop benötigt einige Informationen zu einem Angebot und daher die initialisierung im Konstruktor.
Ich denke du hast da ein riesiges Design Problem im allgemeinen. Die Klasse Shop darf doch niemals nicht von der Klasse Angebot in Abhängigkeit stehen. Schon der logische Umkehrsinn muss dir klar sein. Die Klasse Shop muss, wenn man einen Shop betreiben will, immer existieren. Aber man braucht ja nun nicht immer Angebote in seinem Shop wenn man keine Angebote anbieten will. Also wenn überhaupt dann hängt die Klasse Angebot von der Klasse Shop ab, aber selbst das würde ich nicht in Abhängigkeit setzen, da hast du genügend Möglichkeiten die Klassen als vollkommen eigenständige Klassen zu nutzen ohne diese in irgendeine Abhängigkeit zu setzen.

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
Mit Zitat antworten
  #11 (permalink)  
Alt 14-07-2010, 11:39
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Und warum ist der Shop Singleton?
Singletons sind böse !

Und mal wieder:
Mache dich über "Dependency Injection" kundig.
(für alle, welche schon wieder darauf gewartet haben)
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 14-07-2010, 11:45
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:
Zitat von combie Beitrag anzeigen
Singletons sind böse !
Plenken übrigens auch …
Mit Zitat antworten
  #13 (permalink)  
Alt 14-07-2010, 12:08
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Singletons sind böse!

Besser?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #14 (permalink)  
Alt 14-07-2010, 12:09
dakingno1
 Registrierter Benutzer
Links : Onlinestatus : dakingno1 ist offline
Registriert seit: Nov 2006
Beiträge: 149
dakingno1 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wieso sind Singletons böse?
Nur so kann man sicherstellen nur ein einziges Objekt einer Klasse zu besitzen.
Wenn ich eine Seite in meinem Projekt aufrufe, dann ist es ein bestimmter Shop, also benötige ich überall nur ein uns dasselbe Objekt mit entsprechenden Inforamtionen zu diesem Shop.
Dasselbe gilt dann für die Angebote zum Shop.
An mehreren Stellen benötige ich also dieselben Informationen des Angebote.
Ihr habt schon recht dass das im moment nicht ganz sauber ist.
Das liegt aber daran weil das Projekt refaktorisiert wird. Vorher war alles strukturiert Programmiert und die Informationen wurden über Konstanten ausgetauscht.
Daher ist es alles noch so unsauber.
Aber ich merke schon, ich muss bei der Refaktorisierung noch weiter unten anfangen.

Vielen Dank für die Diskussion und Hilfestellung.

Aber eins würde mich noch interessieren.
Wieso sind Singletons nun böse?^^

Mit Zitat antworten
  #15 (permalink)  
Alt 14-07-2010, 12:14
litterauspirna
 Registrierter Benutzer
Links : Onlinestatus : litterauspirna ist offline
Registriert seit: Nov 2007
Beiträge: 364
litterauspirna ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von dakingno1 Beitrag anzeigen
Wieso sind Singletons böse?
Nur so kann man sicherstellen nur ein einziges Objekt einer Klasse zu besitzen.
Wenn ich eine Seite in meinem Projekt aufrufe, dann ist es ein bestimmter Shop, also benötige ich überall nur ein uns dasselbe Objekt mit entsprechenden Inforamtionen zu diesem Shop.
Dasselbe gilt dann für die Angebote zum Shop.
An mehreren Stellen benötige ich also dieselben Informationen des Angebote.
Ihr habt schon recht dass das im moment nicht ganz sauber ist.
Das liegt aber daran weil das Projekt refaktorisiert wird. Vorher war alles strukturiert Programmiert und die Informationen wurden über Konstanten ausgetauscht.
Daher ist es alles noch so unsauber.
Aber ich merke schon, ich muss bei der Refaktorisierung noch weiter unten anfangen.

Vielen Dank für die Diskussion und Hilfestellung.

Aber eins würde mich noch interessieren.
Wieso sind Singletons nun böse?^^

Ich denke du solltest von ganz vorn beginnen das System neu aufzuziehen, denn eine bestehende Anwendung die prozedural geschrieben ist in OOP umzuändern ist denke ich nicht das gelbe om EI. Du kennst die Funktionalität des Shop, also beginne von vorn, ertelle dir Diagramme, Use Case, Klassendiagramme. Durchdenke dir deine Anwendung vorher recht gut, versuche weit voraus zu schauen, vor allem auch wo eventuelle Erweiterungen folgen können.

Sigletons sind nicht böse, aber es gibt meiner Meinung nach nur sehr wenige Fälle wo es Sinn macht die einzusetzen, dass heist in den wenigsten Fällen wird es passieren das ein Objekt nur ein einziges mal existieren sollte. Von daher richte auch mal ein Blick auf registry Pattern.

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
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
endlosschleife, klassen, php, singleton


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klassen, die sich gegenseitig brauchen?! micronax PHP Developer Forum 10 28-06-2008 00:05
2 Scripte blockieren sich gegenseitig? Gpunkt PHP Developer Forum 3 20-12-2006 00:02
Subdomains gegenseitig Verlinken? Meillo SEO - Suchmaschinen Tricks und Tipps 4 01-04-2005 15:04
Spalten sich gegenseitig vergleichen lassen ... Innuendo SQL / Datenbanken 12 09-02-2004 01:18
klassen innerhalb von klassen verwenden rythms BRAINSTORMING PHP/SQL/HTML/JS/CSS 14 07-11-2003 10:19

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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

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