2017-07-16 6 views
0

ich einen Code zur Zeit bei Aufruf dieser Code wie folgt writting:PHP gibt nichts (auch nicht NULL)

$reduced = is_reduced($pid); 
set_sale($pid, $reduced); 
echo " - " . $reduced . " - "; 

So ist die Logik dahinter sollte wie: ich die Funktion is_reduced() anrufen wissen, wenn ein Produkt reduziert wird. Normalerweise sollte es dort wahr oder falsch sein. Aber ich bekomme nichts zurück. Sie sehen, ich drucke die Variable mit echo auf die Konsole. Aber ich sehe nichts. Nicht einmal NULL!

Aber auf der Konsole kann ich sehen, dass es "wird nicht reduziert" wird ausgedruckt. Also sollte es auch etwas zurückgeben. Auf die echo folgt der Rückgabebefehl in der Funktion is_reduced (Code unten).

Einige Informationen zur Funktion: Eine Seite kann mehrere Preise haben. Dies ist der Grund, warum ich die While-Schleife habe. Wenn es nur einen Preis gibt, bekomme ich -1 zurück auf die var aktueller_counter. Also spring ich in den ersten if Stamm. Dort wird geprüft, ob es einen niedrigeren Preis gibt und wenn ja, wenn dieser Preis nicht 0 ist, nicht "" und nicht niedriger als -1.

Und wie Sie sehen können, heißt es echo gefolgt von return. Aber warum bekomme ich keinen NULL oder irgendeinen booleschen Wert zurück?

Ich würde mich sehr über Hilfe freuen! Mit freundlichen Grüßen!

Hier den Code:

function is_reduced($pid){ 
    $aktueller_counter = -1; 
    while(have_rows('product_shops', $pid)): the_row(); 
     $aktueller_counter = $aktueller_counter + 1; 
    endwhile; 

    if($aktueller_counter == -1){ 
     $price = get_field("product_shops_0_price", $pid); 
     $price_old = get_field("product_shops_0_price_old", $pid); 

     if($price_old < $price) { 
      if ($price_old != "") { 
       if ($price_old != 0) { 
        if ($price_old > -1) { 
         $price = null; 
         $price_old = null; 
         $aktueller_counter = null; 

         echo ", is \"reduced\""; 

         return true; 
        } else { 
         $price = null; 
         $price_old = null; 
         $aktueller_counter = null; 

         echo ", is NOT \"reduced\""; 

         return false; 
        } 
       } else { 
        $price = null; 
        $price_old = null; 
        $aktueller_counter = null; 

        echo ", is NOT \"reduced\""; 

        return false; 
       } 
      } else { 
       $price = null; 
       $price_old = null; 
       $aktueller_counter = null; 

       echo ", is NOT \"reduced\""; 

       return false; 
      } 
     } else { 
      $price = null; 
      $price_old = null; 
      $aktueller_counter = null; 

      echo ", is NOT \"reduced\""; 

      return false; 
     } 
    }else{ 
     for($i = 0; $i <= $aktueller_counter; $i++){ 
      $price = get_field("product_shops_".$i."_price", $pid); 
      $price_old = get_field("product_shops_".$i."_price_old", $pid); 

      if($price_old < $price){ 
       if($price_old != ""){ 
        if($price_old != 0){ 
         if($price_old > -1) { 
          $price = null; 
          $price_old = null; 
          $aktueller_counter = null; 

          echo ", is \"reduced\""; 

          return true; 
         } 
        }else { 
         $price_old = null; 
         $price = null; 
        } 
       }else { 
        $price_old = null; 
        $price = null; 
       } 
      }else { 
       $price_old = null; 
       $price = null; 
      } 
     } 


     $price = null; 
     $price_old = null; 
     $aktueller_counter = null; 

     echo ", is NOT \"reduced\""; 

     return false; 
    } 
} 
+0

Wenn ich mit einem dieser Probleme konfrontiert werde, schreibe einfach ein "echo" hier ";" Zeile und verschiebe es im Code von if zum nächsten, wenn du innerhalb weniger Minuten siehst, wie dein Code funktioniert (und das Problem). – Andreas

+0

'Echos' in Funktion arbeitet richtig? –

+0

Ich habe das schon mit "is not reduced" gemacht. Also, es sollte etwas zurückgegeben werden ... – Erik

Antwort

0

Boolen Wert nicht statt es bekommen echo Sie es als Zeichenfolge angezeigt werden kann. Versuchen Sie folgendes:

$reduced = is_reduced($pid); 
set_sale($pid, $reduced); 
$reduced_str = $reduced ? 'true' : 'false'; 
echo " - " . $reduced_str . " - "; 
1

Wenn Boolesche Werte Anzeige zu screenen, werden Sie leichter mit, sagen wir, var_export() als echo. Es ist durchaus möglich, dass Ihr Code ordnungsgemäß funktioniert false (oder zumindest einige von ihnen).

diese Ereignisse vor: (Demo)

var_export(false); 
    echo "\n----\n"; 
echo false; 
    echo "\n----\n"; 
var_export(true); 
    echo "\n----\n"; 
echo true; 
    echo "\n----\n"; 
var_export(null); 
    echo "\n----\n"; 
echo null; 
    echo "\n----\n"; 

Ausgang:

false 
---- 

---- 
true 
---- 
1 
---- 
NULL 
---- 

---- 

Welchen Zweck hat the_row(); haben?

können Sie ersetzen: $aktueller_counter = $aktueller_counter + 1; mit ++$aktueller_count;

Anstatt zu wiederholen:

$price = null; 
$price_old = null; 
$aktueller_counter = null; 

es wäre Dryer diese Werte als Standardwerte vor dem Satz von conditionals zu erklären, und sie nur überschreiben, wo nötig.

Da Sie nicht $price, $price_old oder $aktueller_counter zurückgeben, gibt es keinen Grund, sie zu deklarieren. Sie werden nur im Rahmen der Funktion existieren. (Es sei denn, Sie haben Ihren Code für diesen Beitrag geändert, und Sie verwenden diese Variablen tatsächlich.)

Auch Ihre bedingten Aussagen sind eher ausführlich/zahlreich. Mit etwas sorgfältiger Überlegung sollten Sie in der Lage sein, bedingte Anweisungen vollständig zu reduzieren und präziseren Code zu schreiben.

+0

Ich werde es mit var_export versuchen :) – Erik