Hauptmenü

Untermenü

PHP - Grundlagen - Bedingungen - Feinheiten

1. Anfänger

... machen zu Beginn eigentlich immer dieselben Fehler, weil es ihnen am Verständnis mangelt. Darum gehe ich hier schon mal auf ein paar Besonderheiten ein. Und lest euch das bitte genau durch. Ist muy importante!

2. Boolsche Logik

... baut auf den Zahlen 0 und 1 auf. Erstere ergibt ein false, die zweite ein true. Allerdings kann es durchaus passieren, dass man eine 0 als korrekten Wert zurückgeliefert bekommt, Und darauf muss man bei Bedingungen achten.

Ein Beispiel

In PHP gibt es die Möglichkeit, zu ermitteln, ob eine Zeichenkette sich innerhalb einer anderen befindet. Dabei erhält man als Rückgabewert die Position. Folgender Bedingung ergibt also ein true.


<?php
  $nadel     'Peter';
  $heuhaufen 'Dieser Pamphlet stammt von Peter Kropff';
  if (strpos($heuhaufen$nadel))
?>

Aber was passiert hier?


<?php
  $nadel     'Peter';
  $heuhaufen 'Peter Kropff ist an allem schuld.';
  if (strpos($heuhaufen$nadel))
?>

Ganz einfach. Die Bedingung ergibt ein false! Warum? Nun, die Position von "Peter" im String $heuhaufen ist in diesem Fall eine 0, da es ganz am Anfang steht. Ist halt so. Also sollte der logische Ausdruck eigentlich korrekt sein. Ist er aber nicht. In so einem Fall muss eine Überprüfung auf Binärebene erfolgen, da erst dann die Zahl 0 und das logische false anders sind.


<?php
  ...
  if (false !== strpos($heuhaufen$nadel))
?>

3. POST- und GET-Variablen

Auch sehr beliebt ist die Überprüfung einer Variablen mittels isset. Leider bekommt man dabei nur die Meldung, ob sie gesetzt ist oder nicht. Und da haben Anfänger so ihre Probleme, wenn sie zum Beispiel überprüfen wollen, ob bestimmte Formularfelder ausgefüllt worden sind. Wenn man aber ein Formular überträgt, so sind alle POST-Variablen gesetzt, das heißt, sie existieren. Daher muss man in so einem Fall mit empty prüfen. Das gilt übrigens auch für GET-Variablen.

4. Die switch-Falle

Anfänger tappen auch hier gerne hinein. Denn es gibt eine Besonderheit. Nämlich das break. Wenn man es nicht setzt, so hat das gravierende Auswirkungen auf die Logik. Dazu ein Beispiel.


<?php
  $a 1;
  switch ($a)
  {
    case 1: echo '$a ist 1';
    case 2: echo '$a ist 2';
            break;
  }
?>

In diesem Fall bekommen wir doch tatsächlich zwei Ausgaben! Und das liegt an dem fehlenden break. Denn die Bedingung entspricht einem


<?php
  if ($a == || $a == 2)
?>

Darum muss man bei einer genauen Unterscheidung immer so vorgehen.


<?php
  $a 1;
  switch ($a)
  {
    case 1: echo '$a ist 1';
            break;
    case 2: echo '$a ist 2';
            break;
  }
?>

Es kann allerdings auch mal der Fall eintreten, wo man zum Beispiel einen Status überprüfen möchte und dabei mehrere Werte ein und dieselbe Aktion auslösen sollen. Dann kann man tatsächlich ein break weglassen.


<?php
  switch ($status)
  {
    case 1: 
    case 2: ...;
            break;
    case 3: ...;
            break;
  }
?>

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt