Der Martin: Die php Kontrollstruktur switch()

Beitrag lesen

Moin,

<?php

$var = 0;
  switch($var)
    {
      case 'foo': $ausgabe = 'foo'; break;
      case 'bar': $ausgabe = 'bar';
    }
  if(isset($ausgabe))
    {
      echo $ausgabe;
    }
?>


>   
> Weder der erste, noch der zweite Fall trifft zu. Deshalb würde ich hier erwarten, dass die if-Bedingung nicht greift, weil $ausgabe nicht existiert.  
  
beachte den Hinweis auf der Handbuchseite, die du verlinkst:  
  
"Beachten Sie auch, dass switch/case typschwache Vergleiche durchführt."  
  
Das bedeutet, dass PHP vor dem Vergleichen die Typen der Operanden einander angleicht. Der Operand von switch() ist in deinem Beispiel numerisch, also werden auch die einzelnen Abfragewerte in eine Zahl konvertiert. Dann wird 'foo' zu 0, und der Vergleich ist erfüllt.  
  
Anders als bei einem Vergleich zweier Werte kann man AFAIK bei witch() keinen typsicheren Vergleich erzwingen. Also muss man als Programmierer aufpassen, dass die Typen der verwendeten Ausdrücke zueinander passen.  
  
So long,  
 Martin  

-- 
Soso, der Klügere gibt nach.  
Aber warum sollen sich immer nur die Dummen durchsetzen?  .oO(?)  
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(