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 26.07.2010, 09:00  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Eine pauschale Antwort ist aber nunmal nicht für jeden Anwendungsfall sinnvoll.

Ich versuche auch in den meisten Objektmethoden die Funktionsweise atomar funktional zu gestalten - die Rückgabe repräsentiert die Funktion über die Eingaben. Im allgemeinen finde ich es sinnvoll, erst im aufrufenden Kontext die Member des Objekts zu schreiben. Damit ergibt sich für die aufgerufene Methode eine größere Anwendungsbreite.
__________________
--
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
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.07.2010, 09:12  
Erfahrener Benutzer
 
Registriert seit: 15.04.2010
Beiträge: 813
PHP-Kenntnisse:
Fortgeschritten
Paul.Schramenko befindet sich auf einem aufstrebenden Ast
Standard

Haste natürlich auch recht.
__________________
"My software never has bugs, it just develops random features."
"Real programmers don't comment. If it was hard to write, it should be hard to understand!"
Positive Bewertungen sind nicht unwillkommen...
Paul.Schramenko ist offline   Mit Zitat antworten
Alt 26.07.2010, 09:40  
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 6
PHP-Kenntnisse:
Anfänger
airobix befindet sich auf einem aufstrebenden Ast
Standard

@Nikosch: Hmmm ... ich verstehe leider Deine Antwort nicht ganz.
Zitat:
die Rückgabe repräsentiert die Funktion über die Eingaben
Was meinst Du damit?
Zitat:
Im allgemeinen finde ich es sinnvoll, erst im aufrufenden Kontext die Member des Objekts zu schreiben.
Meinst Du, dass Du das Objekt mit den nötigen Daten erst im aufrufendem Kontext befüllst?

Z.B.
PHP-Code:
$person1 = new Person();
$person1->addName('Lieschen Müller'); 
???
airobix ist offline   Mit Zitat antworten
Alt 26.07.2010, 09:54  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Dein Beispiel belegt gut meine Aussage:
Zitat:
Eine pauschale Antwort ist aber nunmal nicht für jeden Anwendungsfall sinnvoll.
Natürlich muss eine Setter Methode direkt ins Objekt schreiben. Genau wie eine Getter-Methode immer direkt daraus lesen wird und auch deren Rückgabe festgelegt ist. Für alle anderen Methoden ist die Frage aber nicht pauschal zu beantworten.

Zitat:
die Rückgabe repräsentiert die Funktion über die Eingaben
Code:
Rückgabe = Funktion (Eingabe, Eingabe);
Das ist das Prinzip einer Funktion. In einem Objekt kann das schnell aufweichen, weil es einen zusätzlichen „objektglobalen“ Kontext gibt, in den man die Rückgabe direkt schreiben kann. Wo das möglich ist, rate ich dazu, das zu vermeiden und dies statt dessen ander Stelle zu tun, wo $this->myMethod ($in1, ..); aufgrufen wird.
__________________
--
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 26.07.2010, 12:00  
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 6
PHP-Kenntnisse:
Anfänger
airobix befindet sich auf einem aufstrebenden Ast
Standard

Hmmm ... ich bin noch nicht ganz erleuchtet. Folgendes konstruiertes Beispiel. Ich habe eine Klasse Person, instanziere mir zwei Objekte und lasse sie einander heiraten. Jetzt kann die Aktion schief gehen, weil eine Person bereits verheiratet oder Minderjährig ist. Die Methode "marriageAllowed($person1, $person2)" ist der einfachheit her eine Methode der Person und prüft ob eine heirat möglich ist. Diese prüft auf Alter und bereits verheiratet. Jetzt würde sich bei mir die Frage der Rückgabe stellen.

Wenn ich mir jetzt Eure Antworten durchlese, müsste ich am elegantesten ich die Methode "marriageAllowed()" atomarisieren in zwei Methoden "isOldEnoughToMarry($date)" und "isMarried($person)" die jeweils true/false zurückgeben. In der Methode marriageAllowed()
versuch ich die beiden Funktionen nacheinander mit zu prüfen und im Fehlerfall schmeiße ich eine Exception, oder?

etwa so (sehr vereinfacht ) :

PHP-Code:
class Person(){

var 
$name;
var 
$partner null;
var 
$dateOfBirth null;


function 
setName($name){
    
$this->name $name;
}
function 
marriageAllowed(Person $person1Person $person2){

         if(
$person1->isOldEnoughToMarry($person1->dateOfBirth === false) {
             throw new 
Exception("Person ".$person1->getName." nicht alt genug"); 
         }

         if(
$person2->isOldEnoughToMarry($person2->dateOfBirth === false) {
             throw new 
Exception("Person ".$person2->getName." nicht alt genug"); 
         }
         if(
$person1->isMarried() !== false) {
             throw new 
Exception("Person ".$person1->getName." ist bereits verheiratet "); 
         }

         if(
$person2->isMarried() !== false) {
             throw new 
Exception("Person ".$person2->getName." ist bereits verheiratet "); 
         }
        
retrun true;
}

function 
isOldEnoughToMarry($date) {

  if(
$date heute vor 18 Jahren) {
     return 
true;
  }else{
     
retrun false
   
}
}

function 
isMarried(Preson $person) {

   if(
$person->partner === null) {
      return 
true;
   }else{
      return 
false;
   }
}

}

$person1 = new Person();
$person1->setName('Liesschen')
$person2 = new Person();
$person2->setName('Peter')

try{
  
Person::marriageAllowed($person1,$person2)
} catch (
Exception $e) { 
  echo 
$e->getMessage(); 

airobix ist offline   Mit Zitat antworten
Alt 26.07.2010, 12:14  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

1. solltest Du das nicht statisch machen
2. solltest Du PHP5-gerecht arbeiten und Sichtbarkeiten definieren
3.
Zitat:
versuch ich die beiden Funktionen nacheinander mit zu prüfen und im Fehlerfall schmeiße ich eine Exception, oder?
Nö. Die Aufgabe der Methode ist doch eindeutig zu prüfen (und zu beantworten), ob die Heirat möglich ist. Also würde ich ein BOOL nutzen. Im Gegensatz könnte eine Methode heirate() eine Exception werfen, wenn sie trotz negativer Prüfung trotzdem aufgerufen wird. Das ist eine echte Ausnahme.
Für das Beispiel böte sich allerdings auf jeden Fall an:
PHP-Code:
if ($person1->mAllowed() && $person2->mAllowed()) {
  try {
    
$person1->marry($person2);
  }
  catch (
PersonException) {
    ...
  }

__________________
--
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 26.07.2010, 12:26  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.129
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Bei dem Fall oben hat es sich bewährt, alle Prüfungen durchzuführen und die Fehler in einer Klassenvariable quasi zu sammeln. Die Funktion selber gibt einen boolschen Wert zurück. Die aufgetretenen Fehler holt man sich dann ggf. über eine Extra-Funktion.

Hier sind Exceptions ungeeignet, da Du dann immer nur einen Fehler bekommst, auch wenn vielleicht mehrere vorhanden sind.

Wobei das von Nikosch auch nicht schlecht ist. Hier könnte man, wenn das geht, der Exception als Message ein Array mit Fehlern übergeben. Allerdings würde das das Problem nur in die Funktion marry verlagern.
xm22 ist offline   Mit Zitat antworten
Alt 26.07.2010, 12:28  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Fehlerspeicher haben imho immer das Problem, dass sie nicht zwingend mit dem aktuellen Sttaus des Objekts synchron sind. Die muss man resetten etc.
__________________
--
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 26.07.2010, 12:31  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.129
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Das ist klar. Aber wie wolltest Du hier dem Benutzer alle Fehler, die aufgetreten sind, auf einmal präsentieren? Bei jedem Versuch des Benutzers, bei dem etwas falsch ist, lediglich eine Fehlermeldung ausgeben zu können, kann etwas nervig werden, wenn es mehrere sind..
xm22 ist offline   Mit Zitat antworten
Alt 26.07.2010, 12:35  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Auch das kommt auf den Anwendungsfall an. Nicht immer ist die Warum-Information wichtig. Und auch nicht immer steckt ein Dialog mit einem Benutzer hinter solchen Prüfungen.
__________________
--
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
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] Zip Archive mit PHP erstellen - Kein Fehler, aber ZIP Archiv ist nicht da robat PHP Tipps 2010 34 09.03.2011 20:17
Funktion rename() auf USB-Festplatten bringt Fehler Wing PHP Tipps 2010 13 16.07.2010 23:00
MySQL: Fehler 10046 keine Datenbank ausgewählt aschunk Datenbanken 5 22.04.2010 12:27
[Erledigt] Syntax Error - Wo ist der Fehler? Extremefall PHP Tipps 2009 5 14.12.2009 17:46
[Erledigt] vista, windows update Fehler 80070422 Screeze Off-Topic Diskussionen 3 23.09.2009 18:24
[Erledigt] Fehler bei Array ausgabe newWorldOrder PHP Tipps 2009 2 23.02.2009 17:29
Include fehler abfangen? fadass PHP Tipps 2005-2 16 23.12.2008 13:07
Frage: Suche Fehler in diesem Script... PHP Tipps 2005-2 14 25.10.2005 19:24
[Erledigt] [phpmailer] - SMTP Fehler: Die folgenden Empfänger sind ... PHP Tipps 2005-2 1 05.10.2005 15:19
Seite wird nicht angezeigt, untersch. Fehler bei IE/FF/Safar PHP-Fortgeschrittene 19 31.05.2005 14:52
Blöder MySQL Fehler PHP Tipps 2005 3 15.05.2005 03:14
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
[Erledigt] Wo liegt der fehler?? PHP-Fortgeschrittene 5 22.12.2004 09:54
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
funktion rückgabe, anwendungsbereite php kenntnisse, reagieren bei fehlern, airobix

Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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