使用PHP函数中的返回对象数组

时间:2012-03-09 17:26:39

标签: php arrays object

我遇到了一个奇怪的问题。我正在学习PHP(曾经用Java编程),我正在尝试做一件简单的事情。我有一个DAO方法,可以做这样的事情:

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;

我还有另一个使用此函数的PHP文件(称为getById)作为测试,如下所示:

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

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

  

致命错误:在非对象中调用成员函数getName()   第25行/var/www/socializi/interfaceusuario/index.php

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

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

3 个答案:

答案 0 :(得分: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();
         }
    }

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

共鸣是您正在使用$statslist[] = $statsdao->getById(1);,这会在$ statslist数组的第一个元素内创建结果。所以放下[]。

您可以激活error_reporting(E_ALL);以避免此类问题。这将告诉您,您正在尝试追加非数组变量的元素。

修改 如果数组不存在,我错误地记得PHP给出了这个通知。但似乎方括号表示法$array[]创建了一个数组$ array,如果它不存在的话。

error_reporting(E_ALL);在发展环境中仍然是一个好主意。帮助您避免错误来源。