2012-10-12 43 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>"); 
相关问题