• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

if echo, else echo

hohesc

Neues Mitglied
Hallo, ich stehe gerade auf dem Schlauch und finde keinen Ansatz:

ich habe eine "projekte.php"

Da ich keine zwei Menus bauen möchte, möchte ich das Menu anhand der Parameter aufrufen:

PHP:
if (lang=en) {
echo Projects;
} else {
echo Projekte;
}

Mit verschiedenen Includes bekomme ich das hin, nur beim Echo stelle ich mich gerade etwas dämlich an... Kann jemand helfen?
 
Das ist ....

PHP:
if (lang=en)
Was soll das sein? Das ist kein PHP oder sonstwas.
 
Da ist ja so ziemlich alles falsch, was falsch zu machen ist. Ich gehe davon aus dass lang eine Variable ist. In PHP werden Variablen ein $ vorangestellt. Dann machst Du eine Zuweisung und keinen Vergleich. In Deinem Falle wäre das == So wie Du das machst wird immer der if-Zweig ausgeführt, da Zuweisungen immer als true ausgewertet werden. Apropos Projects, was bitte ist Projects und Projekte? Sind das auch Variablen? Dann gilt das oben gesagte. Und wenn es Variablen sind, was steht in denen drin?

Achja, beim nochmal durchlesen was ich geschrieben habe, fällt mir auf, dass das en​ natürlich auch noch in Hochkommas muss.
 
Projekte / Projects ist einfach nur reiner Text. Ich habe das Menu mit DIVs und CSS erstellt, der Sinn dahinter war einfach nur das ich bei lang=en ein englisches Menu habe und bei lang=de ein deutsches Menu. Ich habe in meiner Seite ein funktionierendes Script das einfach nur Includes statt Echo verwendet, das Prinzip ist das (fast) gleiche

PHP:
<?php

if($kunde->getId()!=0) {
    include_once '../includes/shop_direct.php';
} else {
    include_once '../includes/shop_register.php';
}

?>

Ich wollte diese Funktionalität einfach nur auf Echo ummünzen. - Und wie ihr zeimlich schnell erkannt habt, tu ich mich damit etwas schwer ;)
 
PHP:
if ($lang == "en") {
  echo "<a href='englische-seite.php'>Englisch</a>";
}
else {
  echo "<a href='esperanto-seite.php'>Esperanto</a>";
}
Achte auf die 2 Gleichheitszeichen. Was Du vorher gemacht hast war eine Zuweisung und kein Vergleich.
 
Aus eben diesem Grunde sollte man die Zuweisung auch nach Möglichkeit umgekehrt schreiben.

PHP:
if ("en" == $lang)
{}

Ergibt auf jeden Fall einen Fehler, wenn der Zuweisungs- mit dem Gleichheitsoperator verwechselt wird.
 
Hat allerdings den Nachteil, dass die Lesbarkeit extrem verschlechtert wird... Also mir ( und sicherlich auch anderen ) gehts so, wenn ich im Gedanken den Quellcode durchgeh.
 
Auch einen Begriff dafür es gibt: yoda conditions.

Ich nutze die manchmal, aber ich glaube, jeder halbwegs erfahrene Programmierer macht diesen Zuweisungsfehler ohnehin praktisch nie.

Deshalb verwende ich in der Regel die „normale“ Variante, da ich die auch logischer finde. „Wenn Englisch ist Sprache“ ist einfach nicht die normale Denkrichtung. Wobei das Gewohnheitssache sein mag. Zudem ist es ein Problem bei Vergleichen mit etwas umfangreicherer Nicht-Variablen-Seite, da der interessante Teil, die Variable, erst sehr weit rechts in der Zeile steht. Das kommt mir mit dem Auge etwas schwieriger zu scannen vor, wenn ich die Logik von Codezeilen verfolge oder Variablenwerte debugge.

Wobei ich da bei abstrakteren Sachen wie „Wenn 0 ist Ergebnis dieses preg_match-Aufrufs“ bedeutend weniger Probleme habe, glaube ich. Da wird auch nur mit kurzen Dingen wie 0 oder false verglichen und auch nicht direkt mit dem Wert einer Variablen, sondern eben einer Funktionsrückgabe.

Wesentlicher finde ich persönlich aber den Einsatz von === statt ==, also typsicherer/strikter Vergleich.

- PHP: PHP type comparison tables - Manual
 
aber ich glaube, jeder halbwegs erfahrene Programmierer macht diesen Zuweisungsfehler ohnehin praktisch nie.
Das würde ich so nicht unbedingt sagen. Ich selber bezeichne mich durchaus als halbwegs erfahren. Allerdings waren meine zuerst erlernten Programmiersprachen Basic (privat) und Cobol (beruflich). In beiden Spachen gibt es das "=" als Vergleichsoperator. Bei Cobol ist es dann sogar so, dass es den Zuweisungsoperator "=" gar nicht gibt, dafür gibt es ein "MOVE", bzw. wenn berechnete Werte zugewiesen werden, gibt es das COMPUTE, dann allerdings in Verbindung mit dem "=". Also mir passiert das auch schonmal.

Deshalb verwende ich in der Regel die „normale“ Variante, da ich die auch logischer finde.
Sehe ich genauso

Das kommt mir mit dem Auge etwas schwieriger zu scannen vor, wenn ich die Logik von Codezeilen verfolge oder Variablenwerte debugge.
Eben, spätestens beim 2. Debug-Lauf sehe ich mir dann doch den Vergleich etwas näher an und finde dann den Fehler. Hoffentlich!
 
Zurück
Oben