php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.11.2004, 20:11  
Gast
 
Beiträge: n/a
Standard [Erledigt] switch anweisung

Hallo Leute, also diesmal habe ich mal ne Frage auf die ich die Antwort schon habe, aber ich habe kein Plan warum das so ist und das interessiert mich brennend;

Also ich habe ne switch Anweisung ist für eine Validierung, hier mal den code:
Code:
 $Test= "0"; 


switch($Test != "") { 
     
     case strlen($Test) != "1": 
     	echo "false"; 
     	break; 
      
     case "": 
     	echo "false"; 
     	break; 
      
     default: 
         echo "true";
         break;
}
so liefert die Anweisung ein korrektes Ergebnis die Testvariable darf nur eine stelle lang sein wenn ich aber nun die Anweisung wie folgt schreibe bekomme ich ein falsches Ergebnis, genauer gesagt wird der String "0" als false ausgewertet? dh. strlen($test) != "1" hat NICHT eine stelle aber da ist doch die "0"???

Code:
$Test= "0"; 


switch($Test) { 
     
     case strlen($Test) != "1": 
     	echo "false"; 
     	break; 
      
     case "": 
     	echo "false"; 
     	break; 
      
     default: 
         echo "true";
         break;
}
ich denke das ist ein Problem mit der Switch-Anweisung, würde mich freuen wenn mir jemand helfen kann [/code]
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.11.2004, 21:15  
Gast
 
Beiträge: n/a
Standard Re: switch anweisung

Zitat:
Zitat von koneko
ich denke das ist ein Problem mit der Switch-Anweisung,
ja, das denke ich auch.

PHP-Code:
 $Test"0"


switch(
$Test != "") { 
      
     case 
strlen($Test) != "1"
bedeutet:
PHP-Code:
 $Test"0"


switch(
FALSE) { 
      
     case 
TRUE
  Mit Zitat antworten
Alt 16.11.2004, 22:50  
Gast
 
Beiträge: n/a
Standard

Jepp er hat Recht
switch($Test != "") ist das Problem
  Mit Zitat antworten
Alt 16.11.2004, 22:57  
Gast
 
Beiträge: n/a
Standard

hmmm
aber mit
Code:
 
switch($test != "")
funktioniert es wie ich es will!
  Mit Zitat antworten
Alt 16.11.2004, 23:07  
Gast
 
Beiträge: n/a
Standard

und wo checke ich denn dann ob überhaupt genau eine Zahl eingeben wurde?
  Mit Zitat antworten
Alt 16.11.2004, 23:43  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von koneko
hmmm
aber mit
Code:
 
switch($test != "")
funktioniert es wie ich es will!
ist aber eher zufall
das true kommt vom default-case und nicht vom strlen.

was soll eigentlich switch case, wenn du eh nur zwei zustände checken willst?
  Mit Zitat antworten
Alt 17.11.2004, 00:14  
Gast
 
Beiträge: n/a
Standard

das ist nur ein auszug da sind noch viel mehr drinne
aber das ist doch richtig das das true vom default case kommt denn wenn die Eingabe mehr als 1 zeichen hat soll es false sein, auch wenn nichts, also "" eingegeben wird, soll es ebenfalls false ergeben. Ich glaube ich habe die Frage auch falsch gestellt. Ich versuche es nochmal:
also

ich habe die switch anweisung:
PHP-Code:
$Test"0"


switch(
$Test) { 
Â* Â* Â* 
Â* Â* Â*case strlen
($Test) != "1"
Â* Â* Â*Â* Â*echo "false"
Â* Â* Â*Â* Â*break
Â* Â* Â* 
Â* Â* Â*case 
""
Â* Â* Â*Â* Â*echo "false"
Â* Â* Â*Â* Â*break
Â* Â* Â* 
Â* Â* Â*default

Â* Â* Â* Â* Â*echo "true"
Â* Â* Â* Â* Â*break

hier erwarte ich dass auch wenn $Test wie oben den Wert "0" hat das ich trotzdem den default case erreiche da ja strlen("0") eins ergibt das passiert aber nicht ich bekomme ein false zurück, wenn nun aber $Test den Wert "1" zugeteilt bekommt bekomme ich mein gewünschtes true, das versteh ich nicht, da ja auch der Wert "0" eigentlich bei der Funktion strlen() 1 liefert und somit in den default case verschoben werden müsste. Wenn ich nun aber in der switch anweisung schreibe:
PHP-Code:
switch($Test != "") {
     
usw...

erhalte ich auch bei dem Wert $Test = "0" den gewünschten default case.
  Mit Zitat antworten
Alt 17.11.2004, 01:10  
Gast
 
Beiträge: n/a
Standard

ok, ich versuchs auch nochmal, oben hatte ich auch einen fehler (wahrheitswerte vertauscht).

also:
strlen($Test) != "1" ergibt immer FALSE, genau dann, wenn die variable eine stelle hat, sonst TRUE

case strlen($Test) != "1": bedeutet somit also "case FALSE", ansonsten "case TRUE"
switch($Test) bedeutet bei $Test=0 switch(FALSE) bei allen anderen werten aber switch(TRUE), darum gibt es bei der 0 eine andere auswertung.
eine variable mit dem wert 0 besitzt den wahrheitswert FALSE ebenso leere oder ungesetzte variablen, also $Test="" oder $Test.

switch($Test != "") ergibt wiederum TRUE, womit case FALSE nicht greift.


jedenfalls hantierst du in deinem switch case konstrukt mit wahrheitswerten, woraus diese "komischen ausgaben" resultieren.
die switch anweisung ist eine vereinfachung von if-else-anweisungen.

case strlen($Test) != "1" ist gleich if(strlen($Test) != "1")
bei stringlänge von eins FALSE, sonst TRUE

genauso, wie if(0) FALSE ergibt, wobei if(1) TRUE ist.


... so, jetzt reicht es
  Mit Zitat antworten
Alt 17.11.2004, 09:24  
Gast
 
Beiträge: n/a
Standard

also:
Zitat:
strlen($Test) != "1" ergibt immer FALSE, genau dann, wenn die variable eine stelle hat, sonst TRUE
nee strlen($Test) != "1" ergibt TRUE, genau dann, wenn die Varable eine und nur eine Stelle hat.

Was mich nur verwirrt hat ist das wenn bei der Funktion strlen("0") wohl nicht 1 als eine Stelle zurückgegeben wird, strlen("1") aber wohl schon. Wenn ich nur teste:
PHP-Code:
$Test "0";
$zeige strlen($Test); 
bekomme ich eine 1 zurück. In dem switch case Konstrukt funzt das aber mit "0" nicht, mit "1" aber schon. Aber beide Werte bei der strlen() Funktion 1 zurückliefern.

Das eine switch case anweisung dasselbe wie ein if else konstrukt ist, weiss ich . Ich habe hier allerdigns ein Script welches von jemand anderem getippt wurde der hielt wohl ein switch Konsturkt für Sinnreicher warum, weiss ich nicht, das problem ist ja auch gelöst er akzeptiert nun die "0" auch als eine gülte Eingabe, nur das WARUM ist mit nicht ganz klar, ich glaube das hat auch was mit der Typisierung zu tun, da es hier um den String "1" geht aber auch um den int Wert 1. In Java wäre ein solches Konstrukt gar nicht möglich denke ich
  Mit Zitat antworten
Alt 17.11.2004, 16:38  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von koneko
also:
Zitat:
strlen($Test) != "1" ergibt immer FALSE, genau dann, wenn die variable eine stelle hat, sonst TRUE
nee strlen($Test) != "1" ergibt TRUE, genau dann, wenn die Varable eine und nur eine Stelle hat.
ich bleibe bei meiner aussage. 1 ==1 ist true, 1!=1 somit false.
die typkonvertierung macht übrigens php automatisch.

Zitat:
Zitat von koneko
In dem switch case Konstrukt funzt das aber mit "0" nicht, mit "1" aber schon. Aber beide Werte bei der strlen() Funktion 1 zurückliefern.
sorry, ich dachte, ich konnte es dir oben erklären ...
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variable in SQL Anweisung verwenden Beatbox PHP Tipps 2006 2 08.08.2006 16:32
Dynamische switch anweisung? Calli PHP Tipps 2006 12 11.01.2006 21:44
Performance bei großen Switch Blöcken oder PHP5 Magics HStev PHP-Fortgeschrittene 69 02.12.2005 12:29
switch mit Wertebereich?? PHP Tipps 2005-2 1 02.08.2005 13:16
Probleme mit switch Anweisung und Wertübergabe per URL Bruno PHP Tipps 2005-2 3 07.07.2005 17:00
2 switch abfragen in einer datei!? CHRIS PHP Tipps 2005-2 6 29.06.2005 20:17
Switch / Case + while krummzahn PHP Tipps 2005-2 16 05.06.2005 10:46
if anweisung innerhalb von HEREDOC-Operator möglich? PHP Tipps 2005 11 16.05.2005 17:58
unterkat bei switch erstellen, wie denn? PHP Tipps 2004-2 19 29.12.2004 15:42
while innerhalb von switch PHP Tipps 2004 2 10.09.2004 18:19
Switch PHP-Fortgeschrittene 9 18.08.2004 12:50
PHP Switch abfrage PHP Tipps 2004 9 16.08.2004 22:03
Switch Syntax? PHP Tipps 2004 5 25.06.2004 12:34
Apache und DynDNS hinter Switch Server, Hosting und Workstations 2 21.06.2004 09:17
cookie's und switch PHP Tipps 2004 4 19.06.2004 02:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php switch anweisung, switch anweisung php, sql switch-anweisung, php switch case anweisung, php switch case bereich, switch-anweisung php, php case anweisung, php switch beispiel, http://www.php.de/php-fortgeschrittene/12434-erledigt-switch-anweisung.html, php switch case schleife, php wenn switch nichts ergibt gehe zu, php switch true, php switch leere variable, switch teste, php switch case ohne break, php switch befehl, php switch zeichen test, php switch anweisung if abfrage, wie teste ich ein switch, php switch strlen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:56 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.