phpbar.de logo

Mailinglisten-Archive

[php] goto statements

[php] goto statements

Johannes Schlueter schlueter at phpbar.de
Sam Jul 31 21:27:38 CEST 2004


On Saturday 31 July 2004 20:21, "patrick müller (aka elias)" wrote:
> Johannes Schlueter wrote:
> > Das einzige Problem mit PHP ist, dass die Einstiegskurve zu flach ist,
> > ein "<b>Heute ist der <?=date('d.M.Y');?>!</b>" ist einfach zu schnell
> > hingeschrieben und schon ist man "PHP-Profi".
>
> genau deswegen denke ich das es bald ein goto geben wird,
> denn diese tatsache ist ja durchaus gewollt.

Das ist, auf der entwickler-Liste, das entscheidende Argument _gegen_ Goto: 
Unerfahrene Anwender produzieren damit Spaghetti-Code. Nur wenn man genau 
weiß was man tut und die Alternativen kennt kann Goto Sinn machen - nicht für 
Anfänger. So ist die Gefahr recht groß, dass sowas rauskommt:

<html><?
/* Bitte nicht nachmachen und ja, ich kenne switch, <?php, ... ;-) */
if ($aktion == 'zeig_alle') {
  goto zeig_alle;
} elseif ($aktion == 'zeig_einen') {
  goto zeig_einen;
} else {
  foto fehler;
}

zeig_alle: 
foreach($items AS $item) {
  ?><p><?=$item;?></p><?
}
goto ende;

zeig_einen:
?><p><?=$id;?></p><?
goto ende;

fehler:
?><b>Da ist was falsch gelaufen!</b><?
ende:
?></html>

Sowas wird schlimm und ich spreche aus Erfahrung - wobei meine Basic-Programme 
noch mit Zeilennummern gesprungen sind - was zu nochmehr Chaos führte, ach 
war das 'ne Zeit  ;-)

> IMHO:
> welche features gut oder schlecht im sinne der wartbarkeit
> oder etwa performance funktionieren liegt doch am entwickler
> (sofern es prinzipiell funktioniert). das beinhaltet auch die
> entscheidung das feature überhaupt zu nutzen.

Hängt aber auch davon ab wie gut es ins Sprachkonzept reinpasst. Wie ich 
geschrieben habe finde ich Exceptions in einer Prozeduralen Sprache etwas 
irritierend. "Jedes Feature zu jedem Preis" ist sicher nicht das Optimum und 
unerfahrene Anwender Missbrauchen halt recht oft, unwissentlich, gewisse 
Features.

Eine schöne Lösung für goto wäre den goto-operator nicht "goto" sondern 
"goto_label_and_i_know_what_i_do_and_checked_wether_it_is_required" zu 
nennen, wer das tippt macht sich schon ein wenig mehr Gedanken ;-)

johannes
-- 
Johannes Schlüter
php::bar | Der Treffpunkt für Einsteiger und Profis   http://www.phpbar.de

php::bar PHP Wiki   -   Listenarchive