首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP函数返回的对象数组

问使用PHP函数返回的对象数组
EN

Stack Overflow用户
提问于 2012-03-09 17:26:38
回答 3查看 3.6K关注 0票数 2

我有个奇怪的问题。我正在学习PHP (用来用Java编程),我试图做一件简单的事情。我有一个DAO方法,它执行这样的操作:

代码语言:javascript
复制
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文件,作为一个测试,如下所示:

代码语言:javascript
复制
    $statsdao = new StatsDAO();
    $statslist[] = $statsdao->getById(1);
    foreach ($statslist as $stat) {
        echo $stat->getName();
    }

这似乎很简单: DAO返回一个数组,我的另一个文件读取返回的Stats数组并打印它。但是我得到了这个错误信息:

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-09 17:29:58

试着这样做:

代码语言:javascript
复制
  $statsdao = new StatsDAO();
    $statslist = $statsdao->getById(1);
    foreach ($statslist as $stat) {
        echo $stat->getName();
    }

添加一个只提供更多服务的[],然后将数组放入另一个数组中,从而使您

代码语言:javascript
复制
 $statslist[0][0]->getName(); //would only work on php 5.4 with this syntaxe but it shoes the idea.

一层太深了。

在第一个里面放另一个额头,也可以修复它,但它很难看,什么也没有用:

代码语言:javascript
复制
 $statsdao[] = new StatsDAO();
    $statslist = $statsdao->getById(1);
    foreach ($statslist as $stats) {
         foreach ($stats as $stat) {
             echo $stat->getName();
         }
    }
票数 3
EN

Stack Overflow用户

发布于 2012-03-09 17:32:33

你不需要托架。设置$statslist时。通过将括号放入PHP,您将告诉PHP要创建一个新数组,并将第一个键(0)设置为getById()的返回值。这就产生了一个数组。你不会真的想要那样的。

代码语言:javascript
复制
$statsdao = new StatsDAO();
$statslist = $statsdao->getById(1);
foreach ($statslist as $stat) {
    echo $stat->getName();
}
票数 0
EN

Stack Overflow用户

发布于 2012-03-09 17:32:58

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

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

编辑:如果数组不存在,错误地记得发出了这个通知。但是,如果方括号表示法$array[]不存在,它似乎会创建一个数组$array。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9638390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档