phpbar.de logo

Mailinglisten-Archive

[php] switch und Regex

[php] switch und Regex

Björn Schotte php_(at)_phpcenter.de
Thu, 6 Jun 2002 12:42:32 +0200


* Ryssel, Maik wrote:
> gibt es eine Möglichkeit bei der switch Anweisung auf eine Regexe zu
> matchen??

Zunächst würde man vermuten, dass es nicht geht, zumindest
nicht mit switch ($zu_ueberpruefende_variable):

| The case expression may be any expression that evaluates to a simple type,
| that is, integer or floating-point numbers and strings. Arrays or objects
| cannot be used here unless they are dereferenced to a simple type. 

(http://www.php.net/manual/en/control-structures.switch.php)


In den annotated notes findet sich aber folgender Hinweis:

| just a further example of the above note, you can do the following type of
| searching:
|
| switch (true){
|     case ( ereg ("stats",$userfile_name) ):
|         echo "processing stats";
|         process_stats();
|         break;  
|     case ( ereg("prices",$userfile_name) ):
|         echo "processing prices";
|         process_prices();
|         break;  
|     default:
|         echo = "File not recognized!!.";
| }
|
| this script could be used to determine data formats for uploaded files
| based on a nameing convention. just one example.

Das genannte Beispiel finde ich aber recht dreckig, und IMHO
ist es wesentlich besser und eleganter, einfach ein

if (ereg("stats", $userfile_name)) {
} elseif ( ... ) {
}

zu schreiben anstatt das switch/case Konstrukt so zu mißbrauchen.

Das switch (true) ergibt sich aus der Art, wie PHP überprüft, es
wandelt praktisch das entsprechende case in eine Abfrage der Art:

  if (true == ereg("stats",$userfile_name))

um.

-- 
Verbindliche PHP-Unterstützung gewünscht? Lassen Sie
sich von unserem PHP-Support überzeugen.

Infos anfordern: team_(at)_thinkphp.de


php::bar PHP Wiki   -   Listenarchive