Mailinglisten-Archive |
* 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