2012-03-09 38 views
2

我有一个奇怪的问题。我正在学习PHP(习惯用Java编程),我正在尝试做一件简单的事情。我有一个做了这样的DAO方法:使用从PHP函数返回的对象数组

while (oci_fetch($parse)) { 
     $stats = new Stats(); 
     $stats->setId($id); 
     $stats->setName($name); 
     $stats->setEmail($email); 
     $stats->setGender($gender); 
     $stats->setBirthday($birthday); 
     $statslist[] = $stats; 
    } 

    return $statslist; 

而且我有一个使用此功能(称为getById)另一个PHP文件,作为测试,像这样:

$statsdao = new StatsDAO(); 
    $statslist[] = $statsdao->getById(1); 
    foreach ($statslist as $stat) { 
     echo $stat->getName(); 
    } 

这看起来很简单足够了:DAO返回一个数组,我的另一个文件读取返回的Stats数组并打印它。但我收到此错误消息,而不是:

Fatal error: Call to a member function getName() on a non-object in /var/www/socializi/interfaceusuario/index.php on line 25

奇怪的是:如果我叫DAO的getById函数内部foreach循环,它打印好吗,但是当我调用该函数从外部给它分配到另一个数组,它不会将数组的内容识别为对象。

我在这里做错了什么? 谢谢!

回答

3

试试看这样的:

$statsdao = new StatsDAO(); 
    $statslist = $statsdao->getById(1); 
    foreach ($statslist as $stat) { 
     echo $stat->getName(); 
    } 

您添加[]是提供服务罢了然后把数组另一个数组内从而给你

$statslist[0][0]->getName(); //would only work on php 5.4 with this syntaxe but it shoes the idea. 

一个层次过深。

换言之的foreach的第一个内也将修复它,但它的丑陋和服务无关:

$statsdao[] = new StatsDAO(); 
    $statslist = $statsdao->getById(1); 
    foreach ($statslist as $stats) { 
     foreach ($stats as $stat) { 
      echo $stat->getName(); 
     } 
    } 
+0

嵌套的foreach工作得很好,非常感谢!你会碰巧知道为什么会发生这种情况?我的意思是,如果我返回一个数组,我不明白为什么我得到一个数组内的数组... – 2012-03-09 18:03:17

0

你不需要括号。当设置$ statslist。通过放置括号,你告诉PHP你想创建一个新的数组,并将第一个键(0)设置为返回值getById()。这导致了一组数组。你实际上并不想要那样。

$statsdao = new StatsDAO(); 
$statslist = $statsdao->getById(1); 
foreach ($statslist as $stat) { 
    echo $stat->getName(); 
} 
0

的RESON是所使用$statslist[] = $statsdao->getById(1);,它创建了一个$ statslist阵列的第一元素中的结果。所以放下[]。

您可以激活error_reporting(E_ALL);避免这样的问题。这会告诉你,你正试图添加一个非数组变量的元素。

编辑: 我错误地记得PHP提供此通知,如果数组不存在。但似乎方括号表示法$array[]会创建一个数组$ array,如果它不存在的话。

error_reporting(E_ALL);仍处于发展环境是一个好主意,但。帮助您避免错误的来源。

+0

第二部分是错误的。他有错误显示,他的帖子中出现错误!他也不会追加任何他称之为非客体方法的东西:) – Iznogood 2012-03-09 17:37:05

+0

@Iznogood他会收到通知或警告,指出$ statslist不是数组。 – Crashspeeder 2012-03-09 17:42:18

+0

@Crashspeeder这是一个数组!一个元素数组! – Iznogood 2012-03-09 17:43:38