IF-Abfrage Verständnisfrage

Alice

Erfahrenes Mitglied
Hallo Leute. :)

Ich stehe gerade vor folgender Frage.

PHP:
   $user_group = '1'; // Von 1-9 möglich

   if ($user_group == '1') {
      ...
      Ganz viel Rechenintensiver Code
      ...
   }

   if ($user_group == '2') {
      ...
      Ganz viel Rechenintensiver Code
      ...
   }

   if ($user_group == '3') {
      ...
      Ganz viel Rechenintensiver Code
      ...
   }

   ...

Wie behandelt PHP solche IF-Abfragen? Im Beispiel oben ist "$user_group" ja "1" und die erste IF-Abfrage wäre TRUE und alle anderen FALSE. Nur wie wird der Code in den FALSE-Abfragen behandelt? Wird der "durchgerechnet" oder wird der dann übersprungen?
 
Hi

wird übersprungen.

Nur geparst muss es (unter Umständen) werden,
aber das ist bei rechenintensivem Code zu vernachlässigen.

Am Beispiel deiner Bilder-erstell-Schleifen:
PHP braucht ein paar Mikrosekunden, um zu verstehen, dass da eine Schleife ist usw.,
aber die Bilder werden nicht wirklich erstellt.

Und mit einem Bytecodecache spart man sich ggf. die Parsezeiten auch.

Gruß
 
Ich habe eben etwas ausprobiert.

PHP:
   $user_group = '1'; // Von 1-9 möglich

   if ($user_group == '1') {
      ...
      Ganz viel Rechenintensiver Code
      ...
   }

   echo memory_get_usage().'<br />';

   if ($user_group == '2') {
      ...
      Ganz viel Rechenintensiver Code
      ...
   }

   echo memory_get_usage().'<br />';

   if ($user_group == '3') {
      ...
      Ganz viel Rechenintensiver Code
      ...
   }

   echo memory_get_usage().'<br />';

   ...

Der Speicher hat sich nicht um ein Byte erhöht.

Der Hintergrund meiner Frage ist das ich mir überlege statt einzelne Skripte (z.B. GIF-Animation-Avatar-Generator, Real-Foto-Fun-Generator usw.) einen einzelnen großen Generator zu basteln.

Das würde aber bedeuten das ich mit sehr vielen IF-Abfragen arbeiten muss, in denen auch noch viel Code vorkommt.

Muss ich mir mal überlegen wie ich das mache.

Danke für deine Antwort. :)

Frage ist beantwortet. :)
 
Anstelle von if() bietet sich da aber auch switch() an.
Zudem würde ich Integer als Zahlen vergleichen, nicht als String.
PHP:
$user_group = '1';
swith($user_group) {
  case 1:
    ...
    Ganz viel Rechenintensiver Code
    ...
    break
  case 2:
    ...
    Ganz viel Rechenintensiver Code
    ...
    break
  case 3:
    ...
    Ganz viel Rechenintensiver Code
    ...
    break
}

Die Codes könntest du auch in einzelen Dateien auslagern. Dann bleibt der Haubtcode übersichtlich.
zB: spez_code_NR.php
PHP:
$user_group = '1';
include("spez_code_{$user_group}.php");
 
Keine Ahnzung. Wobei das bei 'nur' 9 Switches wahrscheinlich gar nicht messen lässt. Nach dem break; wird auf alle Fälle der Rest des switch ignoriert.
 
PHP:
if () {

} else if () {

} else if (){

} else {

}
läuft auch nur so lange bis eine Bedingung erfüllt wird. Ähnlich wie bei swich-case

PHP:
if () {

}

if (){

}
..hingegen prüft jede if-Anweisung, von daher ist davon sowieso abzuraten, wenn wirklich nur eine der Bedingungen stimmen muss..

Wahrscheinlich ist es einfach geschmackssache ob switch-cas oder if - else if...

EDIT:

ich denke bei ganz viel Code ist wohl die Variante mit else if besser (übersichtlicher), wenn aber nur eine kurze Anweisung ist wie z.b. eine Zuweisung oder Ähnliches kann man super mit switch-case arbeiten.
 
Zuletzt bearbeitet:
Soweit ich es nicht durcheinander bringe, ist switch/case bei vielen Fällen schneller als else if (sonst würde es auch nie wirklich Sinn machen). Dabei ist aber zu beachten, dass switch NUR auf Gleichheit (==) prüfen kann, prüfungen auf !=, <=, >= <, > etc. sind nur bedingt wenn überhaupt möglich.
Ich stimme dir aber zu, dass bei vielen IF-Bedingungen, wovon nur eine wahr sein kann auf die elseif Syntax zurückgegriffen werden sollte.
 
Dabei ist aber zu beachten, dass switch NUR auf Gleichheit (==) prüfen kann, prüfungen auf !=, <=, >= <, > etc. sind nur bedingt wenn überhaupt möglich.

Das stimmt leider nicht ausser du meinst mit "bedingt":

PHP:
$var = 1;
$var2 = 2;

switch(true){
     case $var < $var2 : echo $var . ' ist kleiner als ' . $var2;
         break;
}
 
@Maniac
Jepp, das was du da machst ist in meinen Augen eine Vergewaltigung von switch()

Der switch eignet sich grundsätzlich zur Auswertung einer einzelner Variable auf verschiedene Werte. Während der elseif bei jedem Check total unterschiedliche Prüfungen unterzogen werden kann.
 
Zurück