Tom: Neuer Anlauf #2

Beitrag lesen

Hello Enrico,

<?php

function ParameterHolen ($_GET)
   {

$_ret ['error'] = 999;  ## schreiben wir mal prophilaktisch rein

if (isset ($_GET['Bild']) && preg_match ("/[1]+[0-9]+$/i", $_GET['Bild']))
      {

$_ret ['bildname'] = "../GRAFIKEN/SORTIMENT/" . $_GET['Bild'] . ".png";

if (file_exists ($_ret ['bildname']))
         {
            if (isset ($_GET['Breite']) && is_numeric ($_GET['Breite']))

usw.

GroesseBerechnen ($Bild, $_GET['Breite'], "");
            elseif (isset ($_GET['Hoehe']) && is_numeric ($_GET['Hoehe']))

GroesseBerechnen ($Bild, "", $_GET['Hoehe']);
            else

##                 echo 'Variable "Breite" oder "Hoehe" fehlt oder ungültig';

keine Ausgaben in Funktionen an die Standardausgabe vornehmen, es sei denn ...

$_ret ['errtxt'] = 'Parameter "Breite" oder "Hoehe" fehlen oder sind ungültig';
             return $_ret;

}
         else

##            echo 'Datei "' . $Bild . '" nicht gefunden';

keine Ausgaben in Funktionen an die Standardausgabe vornehmen, es sei denn ...

$_ret ['error'] = 998;  ## Parameterfehler, Nummer ist frei erfunden
                                      ## mach Dir eine Liste
              $_ret ['errtxt'] = 'Datei "' . $Bild . '" nicht gefunden';

return $_ret;

}
      else

echo 'Variable "Bild" fehlt oder ungpltig';

keine Ausgaben in Funktionen an die Standardausgabe vornehmen, es sei denn ...

Return-Parameter fehlt. Der muss zurückgegeben werden

$_ret ['error'] = 0;   ## kein Fehler aufgetreten
         $_ret ['errtxt'] = false;  ## Kein Fehler, kein Fehlertext

return $_ret;

}

?>

  
  
Bitte beschäftige Dich nochmal mit Funktionen.  
  
PHP ermöglicht es den Funktionen, ein Array zurückzugeben.  
Dieses könnte so ausehen:  
  
$\_ret = array();  
$\_ret['error'] = 0; (kein Fehler aufgetreten)  
$\_ret['errtxt'] = verbale Fehlerbeschreibung, wenn ein Fehler aufgetreten ist  
$\_ret['breite'] = ... (Wert eintragen)  
$\_ret['hoehe'] = ... (wert eintragen)  
  
Du rufst die Funktion dann z.B. so auf:  
  
$\_params = ParameterHolen ($\_GET);  
  
und fragst anschließend, ob $\_params === 0 ist. Dann hat die Funktion ordentlich gearbeitet und Du kannst mit dem nächsten Arbeitsschritt weiterarbeiten. In denübrigen Elementen des Rückgabearrays sollten dann die passenden Werte drinstehen.  
  
Dafür musst Du natürlich in der Funktion sorgen.  
  
Das Schöne an dieser Vorgenensweise ist, dass man Funktionen auch später noch immer erweitern kann, es kommen eben nur einfach weitere Rückgabeparemeter hinzu. Ältere Applikationen können aber trotzdem die neue Funktionsbibliothek benutzen, solange sie "ihre" Paramteter noch in den Rückgabearrays finden können.  
  
Probier es mal zuerst mit der ersten Funktion, bei der ich das schon angedeutet habe, wie es gehen könnte.  
  
  
Und weil es so schön schmutzig ist, also nicht sauber prozedural nach Nassi Shniderman, kann man die geschachtelten Ifs auch meistens durch gestaffelte ifs austauschen, wenn man nach Auftreten eines Fehlers einfach den Fehlerwert ins Ergebnisarray einträgt und dieses dann mittles "return $\_ret" zurückgibt.  
  
Die Funktion wird dann ja beendet und die übrigen Aktionen finden nicht mehr statt.  
  
Das widerspricht zwar - wie schon geschrieben - den Vorgaben für saubere strukturierte Programmierung, macht die Funktionen aber viel leichter lesbar und vermeidet viel Schreibarbeit und Klammernkontrolle.  
  
  
  
  
  
  
  
  
  
  
  
  
Liebe Grüße aus dem schönen Oberharz  
  
  
Tom vom Berg  
![](http://selfhtml.bitworks.de/Virencheck.gif)  
  

-- 
 ☻\_  
/▌  
/ \ Nur selber lernen macht schlau  
<http://restaurant-zur-kleinen-kapelle.de>

  1. a-z ↩︎