2012-10-12 42 views
1

即使我可以在返回語句之前print_r結果,我總是會得到false,但此方法似乎總是返回false。有問題的方法....PHP方法將echo/print_r結果,但不會返回它們

public static function getGroupOptions($pid=0, $ogid=0) { 

     if($data = self::getOptionsData($pid, $ogid)) { 
      $Options = array(); 
      Load::Object('ProductOption'); 
      foreach($data as $key => $rec) { 
       $Option = new ProductOptionObject; 
       $Option->Populate($rec); 
       array_push($Options, $Option); 

      } 

      //echo "<pre>";print_r($Options);echo "</pre>";die; 
      return $Options; 
     } 
     return false; 
    } 

print_r使用正確的數據轉儲ProductOptionObject的數組沒有問題。

這是主叫線路...

  $Options = ProductOptionFactory::getGroupOptions($this->pId, $this->getBean('ogId')); 
      //echo gettype($Options); echo $Options === false ? "FALSE" : "NOT FALSE"; die; 

調試行始終打印 '布爾FALSE'。

使用:PHP 5.3.14/2.2.8的Apache2/CentOS的5.8

+1

有沒有在你的代碼_actual_任何錯字?您發佈的代碼似乎沒問題。 – Passerby

+0

你一定錯過了一些東西。你的代碼是好的 –

+0

不,我已經結束了很多次,我想我可能剛剛發現了一些東西,一些緩存數據附帶了一個huuuuge堆棧跟蹤,可能導致php內部錯誤並跳過第一個返回語句? PHP雖然沒有引發錯誤,但日誌中沒有任何東西 –

回答

0

必須有實際的代碼中的一些錯字。你的代碼似乎沒問題。嘗試調試代碼,你會知道你錯過了什麼地方。

0

我會使用的靜態代替自我例如:

self::getOptionsData($pid, $ogid); 

/** rather use */ 

static:getOptionsData($pid, $ogid); 

但不管這工作完全正常:

php> class A { 
... public static function getOpt() { 
...  return array(1,2,3); 
... } 
... public static function getGrpOpt() { 
...  if (false != $opt = self::getOpt()) { 
...   return $opt; 
...  } 
...  return false; 
... } 
... } 

php> var_export(A::getGrpOpt()) 
array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
) 

所以我帶領相信這個問題是與getOptionsData函數你沒有向我們展示。

如果您顯示如何設法讓內部調試打印,我確信它會按照指示返回$選項,它也會有所幫助,因此沒有其他選擇。

使用var_dump或var_export可以輕鬆查看調試時打印的錯誤值。

0

如果你想捕捉print_r的輸出,使用返回參數:

print("<pre>" . print_r($res, true) . "</pre>"); 
相關問題