php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.05.2009, 14:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
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 Objekt löschen via Methodenübergabe desselben

Moin, hab mal ne OOP-Grundlagenfrage.

Ich habe neulich sowas gesehen (ich glaube im Zusammenhang mit dependency injection):

PHP-Code:
class ABC
  
{
  public function 
addXY (XYObject $xy)
    {
    
// etc.
    
}

  public function 
removeXY (XYObject $xy)
    {
    
// Voodoo
    
}
  } 
Das wirkte auf mich doch irgendwie merkwürdig, normal wäre mein Ansatz eher
PHP-Code:
class ABC
  
{
  public function 
addXY ($identifier XYObject $xy)
    {
    
// etc.
    
}

  public function 
removeXY ($identifier)
    {
    
// Voodoo
    
}
  } 
Vielleicht ist das aber zu procedural gedacht und die Idee, das Objekt über die Übergabe desselben aus einem Stack o.ä. zu löschen mehr am OOP Gedanken?
Ich würde gerne mal wissen, was Ihr davon haltet. Vielleicht noch als Argumentationsgrundlagen:

- In 2/ ist der Zusammenhang zwischen $identifier und Objekt eher eine Vereinbarung. Zwingend zusammenhängend sind sie nicht, es sei denn man würde $identifier im aufrufenden Kontext aus XYObject bestimmen (getId () o.ä.).

- in 1/ muss immer ein Objekt vorhanden sein, selbst wenn es nur gelöscht werden soll

- unabhängig davon, ob das gut oder schlecht ist, kann der aufrufende Kontext in 1/ nur Objekte löschen, über die er verfügt (die er bspw. erzeugen kann), in 2/ dagegen jegliches Objekt. Ein Unterschied in der Sichtbarkeit/Zuständigkeit.

Auch wenn das sehr abstrakt und ohne konkreten Anlass ist, wäre ich gespannt auf Eure Meinungen
__________________
--
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 gerade online   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 31.05.2009, 15:09  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
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

Ich mache es wie im 1. Beispiel, damit ich nicht versehentlich IDs anderer Typen/Objekte übergebe (oft schwirrt ja mehr als eine ID im Skriptkontext herum). Die Instanz brauch ich meistens eh für eine Feedback-Nachricht (Projekt "Stausee 2009" wurde erfolgreich gelöscht).

Zitat:
- unabhängig davon, ob das gut oder schlecht ist, kann der aufrufende Kontext in 1/ nur Objekte löschen, über die er verfügt (die er bspw. erzeugen kann), in 2/ dagegen jegliches Objekt. Ein Unterschied in der Sichtbarkeit/Zuständigkeit.
Ich finde das einen Vorteil. Sagen wir im aktuellen Kontext darf Objekt #1 nicht gelöscht werden. Bei einem Objekt kannst du das nun viel leichter testen, entweder gleich bei der Instanzierung oder mit einer Methode im Objekt. Hast du nur die ID, weisst du eigentlich nichts. Ich finde man sollte möglichst überall Objekte übergeben anstatt IDs. Mit einem Objekt hast du ja sowieso auch die ID.
__________________
"Nuschel ich?" - "Was?"

Geändert von Chriz (31.05.2009 um 15:13 Uhr).
Chriz ist gerade online   Mit Zitat antworten
Alt 31.05.2009, 18:58  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Ich würde es auch so machen wie im ersten Beispiel. Hat den Vorteil, dass das Programm sich keinen Identifier merken muss. Das Objekt ist hier sein eigener Identifier. Intern wird das dann in einem numerischen Array gespeichert. Die Prüfung, ob das Objekt bereits gespeichert wurde sowie das Auslesen zum Entfernen des Objektes wird dann mit array_search() realisiert (natürlich mit strict-Parameter).
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 31.05.2009, 19:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
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

Ich würde sagen, es zeichnet sich bereits jetzt eine Tendenz ab
__________________
--
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 gerade online   Mit Zitat antworten
Alt 31.05.2009, 19:14  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Iwo.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 31.05.2009, 21:02  
Erfahrener Benutzer
 
Benutzerbild von Celli
 
Registriert seit: 24.05.2009
Beiträge: 158
Celli befindet sich auf einem aufstrebenden Ast
Standard

Ohne einen eindeutigen Identifier unter der das Object abgelegt wird, hat man bei mehreren Instanzen des Objektes beim entfernen Probleme.
__________________
Eine Antwort oder Lösung habe ich nicht immer, aber zu 99,9% eine Idee. (200 Posts Limit)
Celli ist offline   Mit Zitat antworten
Alt 31.05.2009, 21:19  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Nö, wieso? Ein Objekt existiert sowieso nur einmal, außer man dupliziert es ausdrücklich mit clone und wenn man es mit clone dupliziert hat, ist es durch den typensicheren Operator auch unterscheidbar. Verschiedene Instanzen sind eh unique, also unterscheidbar.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 31.05.2009, 21:40  
Erfahrener Benutzer
 
Benutzerbild von Celli
 
Registriert seit: 24.05.2009
Beiträge: 158
Celli befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Verschiedene Instanzen sind eh unique, also unterscheidbar.
Könnstest Du mir das anhand des Beispiels erklären?

PHP-Code:
$instanz1 = new XYObject ();
$instanz2 = new XYObject ();

$test = new ABC();
$test->addXY($instanz1);
$test->addXY($instanz2);

$test->removeXY($instanz1); 
__________________
Eine Antwort oder Lösung habe ich nicht immer, aber zu 99,9% eine Idee. (200 Posts Limit)

Geändert von Celli (31.05.2009 um 21:45 Uhr).
Celli ist offline   Mit Zitat antworten
Alt 31.05.2009, 21:44  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
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

Es geht darum:

PHP-Code:
$instanz1 = new XYObject ();
$instanz2 = new XYObject ();
var_dump ($instanz2 === $instanz1); // bool FALSE 
__________________
--
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 gerade online   Mit Zitat antworten
Alt 31.05.2009, 21:46  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Und in diesem speziellen Falle um array_search() mit drittem Parameter, der aber an sich nichts anderes macht.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 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] Objekt an Konstruktor übergeben hawkeye78 PHP Tipps 2009 7 28.02.2009 19:01
User mit PHP aus DB löschen MistaJ PHP Tipps 2008 10 01.12.2008 19:38
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
Objekt übergeben Fatal Error PHP Tipps 2007 5 28.12.2005 14:43
Bilder löschen PHP Tipps 2005-2 4 24.10.2005 11:37
Vor dem löschen abfragen ob man wirklich löschen will PHP Tipps 2005-2 1 05.09.2005 11:54
MySQL/PHP: Löschen von Datensätzen ajo_silent PHP Tipps 2005-2 8 03.08.2005 17:00
Problem mit PFad Firefox - Verzeichnis löschen PHP Tipps 2005-2 0 19.07.2005 16:05
Verzeichnis löschen - falscher Webserverbenutzer ?! PHP Tipps 2005-2 11 09.07.2005 00:35
kann sich ein Objekt selbst serialisieren? ajo_silent PHP Tipps 2005-2 24 27.06.2005 09:13
[FRAGE] Datein per PHP löschen. PHP Tipps 2005 21 11.05.2005 19:36
[Erledigt] Sicherheitsabfrage beim Löschen aus DB PHP Tipps 2005 6 05.04.2005 10:24
Datei löschen mit unlink PHP Tipps 2004-2 4 30.11.2004 00:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php methodenübergabe, java objekt löschen, php objekt löschen, object löschen im object php, objekt in methode löschen java, php oop instanz löschen, php methode objekt löschen, java objekte löschen methode, java objekt löschen mehtode, php objekt \methode löschen\, php oop objekte löschen, php oop objekt überschreiben, java methodenübergabe, php objekt mit mehode löschen, php class instanz löschen, php object zerstören über methode, php oop object leeren, java methodenübergabe objekt, html pbjekt löshen, php wenn mehr als eine instanz vom objekt erstellt wurde löschen

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