php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.08.2011, 01:53  
Benutzer
 
Registriert seit: 10.06.2010
Beiträge: 37
PHP-Kenntnisse:
Fortgeschritten
acetox94 befindet sich auf einem aufstrebenden Ast
Standard Objekt und mit sämtlichen Referenzen löschen

Guten ehm.. Morgen

Ich bin hier grad etwas am tüffteln... und zwar geht es um Folgendes:

Ich habe eine Klasse, die eine Datei im Dateisystem repräsentiert. Mit Hilfe dieser Klasse kann ich Dateioperationen wie Schreiben, Lesen etc. durchführen. Nur habe ich folgendes Problem: Ich möchte eine Methode schreiben, die die Datei, auf die sich die Instanz dieser Klasse bezieht (btw. jede Datei besitzt nur EINE Instanz => Singleton) löscht. Mithilfe von
Code:
unlink
ist das auch gleich erledigt, jedoch besteht das Problem, dass die Instanz noch existiert und die Methoden, die mit der Datei arbeiten nun nicht mehr funktionieren, da die Zieldatei ja gelöscht wurde. Ich kann jedoch weder ein
Code:
unset($this)
oder
Code:
$this = null;
durchführen, da das erstens mal nicht erlaubt ist und zweitens kann ich damit auch nur EINE Referenz zur Instanz löschen. Das bringt mir leider nicht viel, da die Instanz global gelöscht werden müsste, damit nicht mehr auf die jeweiligen Methoden zugegriffen werden kann.
Ich hab mir jez schon lange den Kopf darüber zerbrochen, wie ich das jez am besten anstell.. eine Möglichkeit wäre, dass die Instanz eine Markierung bekommt, wenn die Bezugsdatei gelöscht wird und in jeder Methode wird erst überprüft, ob die Instanz die entsprechende Markierung hat. Wenn ja, soll eine Exception geworfen werden.
Jedoch ist das ganze ziemlich unelegant.. :/
Ich weis echt nich wie ich das Problem lösen soll o.@ Ich hoff, irgendwer weis da einen guten Ratschlag..

Mfg Fips.

EDIT: Uups, Titel ist etwas misslungen .__.

Geändert von acetox94 (07.08.2011 um 01:57 Uhr).
acetox94 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.08.2011, 02:38  
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

a) Im Objekt Flag setzen dass Datei gelöscht ist oder den Dateinamen löschen
b) Das Objekt so in einer Struktur ablegen, dass es dort gelößcht werden kann. Anbieten würde sich wohl eine Komposition. Ich sehe da jetzt gerade kein Problem.

Wo Du allerdings Singleton verwendest ist mir nicht klar. Eine Klasse, die meherere Objektinstanzen erlaubt, ist kein ST.
__________________
--
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   Mit Zitat antworten
Alt 07.08.2011, 13:35  
Benutzer
 
Registriert seit: 10.06.2010
Beiträge: 37
PHP-Kenntnisse:
Fortgeschritten
acetox94 befindet sich auf einem aufstrebenden Ast
Standard

Also erstens mal zum "Singleton": Es ist kein direktes Singleton, wenn man jedoch auf die Dateiebene schaut, eigentlich schon... Die Klasse gibt nur dann eine neue Instanz frei, wenn es sich um eine neue Datei handelt.. wenn es sich um die gleiche Datei handelt, gibt es immer die gleiche Instanz frei.. ein

PHP-Code:
var_dump(Kernel_Filesystem_File::getInstance('./test.txt') === Kernel_Filesystem_File::getInstance('./ordner/../test.txt')); // true

var_dump(Kernel_Filesystem_File::getInstance('./test.txt') === Kernel_Filesystem_File::getInstance('./foo.txt')); // false 
Würde also ein bool(true) zurückgeben.

Warum ich das so gebaut hab, ist eine andere Geschichte...

Jetzt aber zum eigentlichen Problem: Die Instanz, die diese statische Methode 'getInstance' zurückgibt, verteilt sich im Endeffekt im Ganzen Script /bzw. ich geh davon aus). Und ich kann die Instanz nicht löschen, solang ich jede Referenz im Script darauf auch lösche.. das ist aber das Problem, ich weis nicht wo die Referenzen überall sein werden. Das mit dem Flag ist ziemlich unelegant, da ich dann in jeder (zukunftigen) Methode erst überprüfen muss, ob dieses Flag nicht gesetzt ist.
Was du mit "Komposition" meinst, versteh ich nicht ganz.. vllt kannst du mir das mal genauer erleutern.

Mfg Fips.
acetox94 ist offline   Mit Zitat antworten
Alt 07.08.2011, 13:41  
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

Zitat:
Zitat von acetox94 Beitrag anzeigen
Das mit dem Flag ist ziemlich unelegant, da ich dann in jeder (zukunftigen) Methode erst überprüfen muss, ob dieses Flag nicht gesetzt ist.
Sehe ich anders.

Wirklich unelegant erschiene mir eher folgendes:
Zitat:
Und ich kann die Instanz nicht löschen, solang ich jede Referenz im Script darauf auch lösche.. das ist aber das Problem, ich weis nicht wo die Referenzen überall sein werden.
Dann hättest du an zahlreichen Stellen im Script Referenzen rumfliegen auf ein Objekt, das gar nicht mehr existiert. D.h. dann aber wiederum, dass du an jeder solchen Stelle erst mal überprüfen müsstest, ob das referenzierte Objekt noch existiert.
Statt einer zentralen Stelle, wo du eine Bedingung überprüfst (in der Klasse, vor Zugriff auf File Flag abprüfen) also zig Stellen, wo du prüfen müsstest ...

Das erscheint mir wesentlich uneleganter.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 07.08.2011, 13:50  
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

Vielleicht solltest Du mal beschreiben, was Du mit den Objekten so anstellst. Eine Komposition wäre im Konkreten Fall ein Nachbau der Dateisystemstruktur als Objektbaum. Die Objekte haben dabei eine hohe Assoziation zum Elternknoten und können davon losgelöst nicht existieren. Wenn Du konkrete Objekte aus der Klasse herauslöst und anderweitig selbständig verwendest, hast Du natürlich ein Problem. Deswegen solltest Du Deine Operationen so gestalten, dass sie auf ein Dateiobjekt erzeugen, nicht mit einem Objekt.
__________________
--
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   Mit Zitat antworten
Alt 07.08.2011, 15:16  
Benutzer
 
Registriert seit: 10.06.2010
Beiträge: 37
PHP-Kenntnisse:
Fortgeschritten
acetox94 befindet sich auf einem aufstrebenden Ast
Standard

Es geht ganz konkret um mein "Fun"-Framework (einfach zum Lernen).. http://sourceforge.net/p/hpkframework/code/5/tree/ Ich will einfach Dateien und mit einer Objekt-Schnittstelle ansprechen. Damit kann ich dann z.B. meinen Autoloader füttern oder Konfigurationsdateien gezielt auslesen und schreiben.

Mfg Fips.
acetox94 ist offline   Mit Zitat antworten
Alt 07.08.2011, 15:20  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hi,

mach das nicht, du handelst dir ne Menge Nachteile ein, die meisten wurden schon genannt. Die Klasse darf bzw. muss wissen, ob sie existiert, aber das Objekt dann vernichten macht die Anwenderskripte nicht gluecklich. Ausserdem geht es so ohne weiteres nicht.

Schau dir doch mal das Zustands-Entwurfsmuster an:
http://de.wikipedia.org/wiki/Zustand_(Entwurfsmuster)

PS: Nur weil es ein Funframework ist, muss man nicht gleich anfangen in schlechtem Stil zu programmieren. Im Gegenteil, gerade hier kann man ja mal versuchen, alles pingelig genau richtig zu machen. Waere zumindest meine Rangehensweise.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Antwort


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] PHP Objekt serialisieren PeterXV PHP Einsteiger 14 07.07.2011 20:33
Bestehendes Objekt in einer inkludierten File Nutzen MLang PHP Einsteiger 6 25.02.2011 15:45
[Erledigt] Im Contructor Objekt löschen 0815Neo PHP Einsteiger 3 03.01.2011 10:19
Gruppenmitglieder zählen choice Datenbanken 2 07.12.2010 19:58
Objekt per Klassenmethode löschen Ti-Systems PHP Tipps 2010 4 20.01.2010 19:28
[Erledigt] Objekt Iteration Löschmethode stayInside PHP-Fortgeschrittene 10 29.11.2009 15:07
MySql Tabellenzeile per Link löschen Q-Meax PHP Tipps 2009 8 03.10.2009 13:30
[Erledigt] Referenzen auf Objekte innerhalb eines Arrays PHP-Fortgeschrittene 6 31.08.2009 17:06
[JavaScript] new Objekt => Wieder löschen Destruction JavaScript, Ajax und mehr 2 29.08.2009 16:23
Objekt löschen via Methodenübergabe desselben nikosch Software-Design 19 01.06.2009 00:38
[Erledigt] Objekt an Konstruktor übergeben hawkeye78 PHP Tipps 2009 7 28.02.2009 19:01
Objekt im GET-Query wird nicht übertragen Ralpho PHP-Fortgeschrittene 10 05.05.2008 10:03
[Erledigt] PHP5 OOP Zugriff aus einem Objekt auf ein externes Objekt PHP Tipps 2006 5 28.01.2006 16:05
Vor dem löschen abfragen ob man wirklich löschen will PHP Tipps 2005-2 1 05.09.2005 11:54
kann sich ein Objekt selbst serialisieren? ajo_silent PHP Tipps 2005-2 24 27.06.2005 09:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php objekt löschen, php instanz löschen, php alle referenzen auf ein objekt löschen, php statisches objekt löschen, php alle daten in einem objet löschen, alle referenzen objekt, instanz zerstören, php destruct alle objekt löschen, mysql \referenzen löschen\, php objekt referenzen zählen, php objekt referenzen, php objekt anzahl referenzen, php existiert instanz, object löschen php, php alle verweise auf ein objekt zerstören, destruct php object entfernen, php prüfen, ob noch objekte einer klasse existieren, referenz löschen php, wie kann ich referenzen löschen, php referenz löschen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:04 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