2017-07-16 150 views
0

我此刻書面方式代碼在調用此代碼:PHP沒有返回值(甚至未NULL)

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

因此,背後的邏輯應該是這樣的: 我調用函數is_reduced()到知道,如果產品減少。通常,它應該在那裏返回真或假。但我沒有得到任何回報。你可以看到,我正在用變量向控制檯打印變量。但我什麼也沒看到。甚至不是NULL!

但在控制檯上,我可以看到,它得到「不減少」打印出來。所以,它也應該返回someting。因爲echo後面跟着函數is_reduced(下面的代碼)中的返回命令。

功能的一些信息: 一頁可以有多個價格。這就是爲什麼我有while循環的原因。如果只有一個價格,我得到-1回到var aktueller_counter。所以,我跳進第一個部落。在那裏檢查是否有較低的價格,如果是,如果這個價格不是0,不是「」並且不低於-1。

正如你所看到的,它說echo其次是return。但爲什麼我沒有得到任何NULL或任何布爾值回來?

我會很樂意幫忙! 親切的問候!

下面的代碼:

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

當我面對其中一個問題時,我會做的就是在這裏寫一個'echo';'將代碼從if轉移到next,如果在幾分鐘內你會看到你的代碼是如何工作的(和問題)。 – Andreas

+0

'回聲'功能的工作權利? –

+0

我已經做到了「不減少」。所以,它應該是返回的東西... – Erik

回答

0

Boolen價值不得到呼應,而不是它,你可以將其顯示爲字符串。試試這個:

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

當顯示布爾值與屏幕,你將有,比方說一個更簡單的時間,比var_export()echo。您的代碼完全可能在false退貨(或至少其中一些)上正常工作。

考慮這些事件:(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"; 

輸出:

false 
---- 

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

---- 

the_row();有什麼目的?

您可以更換:$aktueller_counter = $aktueller_counter + 1;++$aktueller_count;

而不是重複:

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

這將是機將這些值作爲設定條件句的前違約聲明,並在必要時僅覆蓋它們。

由於您未返回$price,$price_old$aktueller_counter,因此沒有理由聲明它們。它們只會在函數的範圍內存在。 (除非,你已經修改了你的這個帖子的代碼,你實際上正在使用這些變量。)

另外,您的條件語句比較冗長/很多。經過仔細考慮,您應該能夠減少總條件語句並編寫更簡潔的代碼。

+0

我會試着用var_export :) – Erik

相關問題